On 30 mei, 21:02, Dave Angel <da...@ieee.org> wrote: > Sven Arduwie wrote: > > On 30 mei, 17:02, Sven Arduwie <sven.ardu...@gmail.com> wrote: > > >> Can anyone help a python newbie and tell me why the simple window I > >> created in Glade is not showing? > > >> This is the XML generated by Glade 3: > >> <?xml version=.0"?> > >> <interface> > >> <requires lib=tk+" version="2.16"/> > >> <!-- interface-naming-policy project-wide --> > >> <object class=tkWindow" id="helloWorld"> > >> <property name=isible">True</property> > >> <signal name=estroy" handler="on_helloWorld_destroy"/> > >> <child> > >> <placeholder/> > >> </child> > >> </object> > >> </interface> > > >> And this is the Python code: > >> #!/usr/bin/env python > > >> import pygtk > >> pygtk.require("2.0") > >> import gtk > > >> class HelloWorld(object): > >> def getWindow(self): > >> return self.window > > >> def setWindow(self, window): > >> self.window =indow > > >> window =roperty(getWindow, setWindow) > > >> def __init__(self): > >> builder =tk.Builder() > >> builder.add_from_file("helloWorld.glade") > >> builder.connect_signals({"on_helloWorld_destroy" : > >> self.onHelloWorldDestroy}) > >> self.window =uilder.get_object("helloWorld") > >> self.window.show() > > >> def onHelloWorldDestroy(self): > >> pass > > >> I ran this in a terminal on Ubuntu 9.04 like this: > >> s...@dell:~$ cd ./gvfs/python\ on\ sven/ > >> s...@dell:~/gvfs/python on sven$ python ./helloWorld.py > >> s...@dell:~/gvfs/python on sven$ > > > Okay I'm mad at myself for forgetting this: > > > if __name__ ="__main__": > > helloWorld =elloWorld() > > gtk.main() > > > When I add that, a new problem arises: the terminal floods with: > > File "./helloWorld.py", line 12, in setWindow > > self.window =indow > > File "./helloWorld.py", line 12, in setWindow > > self.window =indow > > File "./helloWorld.py", line 12, in setWindow > > self.window =indow > > ad infinitum > > You have infinite recursion because setWindow is defined indirectly in > terms of itself. It uses the property 'window', which is defined to use > setWindow. > > The cure for it is simple. If you want to have a private data > attribute, use a leading underscore. Don't call it the same thing that > the public is going to use. > > class HelloWorld(object): > def getWindow(self): > return self._window > > def setWindow(self, window): > self._window = window > > window = property(getWindow, setWindow) > > def __init__(self): > builder = gtk.Builder() > builder.add_from_file("helloWorld.glade") > builder.connect_signals({"on_helloWorld_destroy" : > self.onHelloWorldDestroy}) > self._window = builder.get_object("helloWorld") > self._window.show() > > def onHelloWorldDestroy(self): > pass > > (untested)
That solved the problem, thanks! I assume that the getWindow and setWindow can be bypassed by using the _window property directly and that Python has no visibility keywords like private or protected. Sort of like PHP 4. (Not that I want to compare Python to anything like that mess, lol ;)) -- http://mail.python.org/mailman/listinfo/python-list