Python and Glade: window not showing

Dave Angel davea at ieee.org
Sat May 30 15:02:35 EDT 2009


Sven Arduwie wrote:
> On 30 mei, 17:02, Sven Arduwie <sven.ardu... at 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:
>> sven at Dell:~$ cd ./gvfs/python\ on\ sven/
>> sven at Dell:~/gvfs/python on sven$ python ./helloWorld.py
>> sven at 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)




More information about the Python-list mailing list