I’ve been writing writing a small pygtk application using glade to put together the UIs. I’ve created several windows already that work, but for some reason this one isn’t working. I get the following traceback:
Traceback (most recent call last): File 'test.py', line 7, in <module> class TestClass: File 'test.py', line 10, in TestClass self.wTree.signal_autoconnect(self) NameError: name 'self' is not defined
Here is the contents of test.py:
#!/usr/bin/env python import pygtk import gtk import gtk.glade class TestClass: def __init__(self): self.wTree = gtk.glade.XML('test.glade') self.wTree.signal_autoconnect(self) def on_TestClass_destroy(self, widget, data): gtk.main_quit() if __name__ == '__main__': window = TestClass() gtk.main()
And here is the glade file, test.glade:
<?xml version='1.0' encoding='UTF-8' standalone='no'?> <!DOCTYPE glade-interface SYSTEM 'glade-2.0.dtd'> <!--Generated with glade3 3.4.5 on Fri Nov 21 08:53:53 2008 --> <glade-interface> <widget class='GtkWindow' id='TestWindow'> <property name='visible'>True</property> <property name='title' translatable='yes'>Test Window</property> <signal name='destroy' handler='on_TestClass_destroy'/> <child> <placeholder/> </child> </widget> </glade-interface>
The strange thing is that if I take out the signal_autoconnect(self) call, the window opens. But if I replace that call with ‘self.on_TestClass_destroy(self, None, None)’ instead, it returns the same NameError exception.
I really don’t understand why this isn’t working, as I’ve created several other window classes that work fine.
Is the following code working for anyone here?
That code and window and signal connection work fine here.
There is a small bug though when calling the signal handler. The signal handler should not have a data argument, since only the widget is passed as an argument.
The data argument(s) are only those provided on connect in case you need extra state for a signal handler.