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)

--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to