Question

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?

Was it helpful?

Solution

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.

def on_TestClass_destroy(self, widget):
    gtk.main_quit()

The data argument(s) are only those provided on connect in case you need extra state for a signal handler.

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