Question

I'm trying to use pyjamas (http://pyjs.org/). My input file, named hi.py, looks like this:

from pyjamas import Window
from pyjamas.ui import RootPanel, Button
from pyjamas.ui import HTML

def greet(sender):
    Window.alert("Hello!")

b = Button("Click me", greet)
RootPanel().add(b)

I run the following command:

python ~/pyjs-pyjs-07f54ad/bin/pyjsbuild hi.py
Building : hi
PYJSPATH : [
    /Users/michaelnatkin/HelloPyjs
    /Users/michaelnatkin/pyjs-pyjs-07f54ad/library
    /Users/michaelnatkin/pyjs-pyjs-07f54ad/addons
]
Built to : /Users/michaelnatkin/HelloPyjs/output

Which appears to run without errors, and here is my resulting directory:

Michael-Natkins-MacBook-Pro-2:HelloPyjs michaelnatkin$ ls .
hi.js   hi.py   output
Michael-Natkins-MacBook-Pro-2:HelloPyjs michaelnatkin$ ls output
__init__.py         gchart.gif          hi.safari.cache.html
_pyjs.js            hi.html             history.html
bootstrap.js            hi.ie6.cache.html       tree_closed.gif
bootstrap_progress.js       hi.mozilla.cache.html       tree_open.gif
disclosurePanelClosed.png   hi.nocache.html         tree_white.gif
disclosurePanelClosed_rtl.png   hi.oldmoz.cache.html
disclosurePanelOpen.png     hi.opera.cache.html

I then direct my browser to one of the html files: file:///Users/michaelnatkin/HelloPyjs/output/hi.html

and I get... a blank page. The only error in my js console is:

Uncaught SecurityError: Blocked a frame with origin "null" from accessing a frame with origin "null". Protocols, domains, and ports must match. 

which I guess isn't too surprising since the html file says:

<html>
<!-- auto-generated html - You should consider editing and adapting this
 to suit your requirements. No doctype used here to force quirks mode; see
 wiki for details: http://pyjs.org/wiki/csshellandhowtodealwithit/
-->
<head>

<title>hi (Pyjamas Auto-Generated HTML file)</title>
<meta name="pygwt:module" content="hi">
</head>
<body style="background-color:white">
<script type="text/javascript" src="bootstrap.js"></script>
<iframe id="__pygwt_historyFrame" style="display:none;"></iframe>
<script type="text/javascript" src="bootstrap.js"></script>
<iframe id="__pygwt_historyFrame" style="display:none;"></iframe>
</body>
</html>

So.. I'm completely stuck. Can someone tell me how to get this bad boy to produce output? I've got a much more complicated app I want to create, but if I can't say "Hello" it isn't going to go well. Thank you!

Was it helpful?

Solution

Have you tried it in Firefox too? While nothing is displayed with Chrome, with Firefox I get an error message which comes from the way you import RootPanel and Button. You should replace your single line by:

from pyjamas.ui.RootPanel import RootPanel
from pyjamas.ui.Button import Button

After that your button greets me properly.

And regarding the Chrome issue, either launch it with --allow-file-access-from-files or run a local web server to display your page. More details there: https://github.com/pyjs/pyjs/wiki/googlechromeproblems

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top