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:
我一直在编写一个使用glade编写一个小pygtk应用程序来组合UI。我已经创建了几个可以工作的窗口,但由于某种原因,这个窗口无效。我得到以下回溯:
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:
这是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:
这是glade文件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.
奇怪的是,如果我取出signal_autoconnect(self)调用,窗口就会打开。但是,如果我用“self.on_TestClass_destroy(self,None,None)”替换该调用,则返回相同的NameError异常。
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?
以下代码是否适用于此处的任何人?
1 个解决方案
#1
4
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.
数据参数仅是连接时提供的参数,以防您需要信号处理程序的额外状态。
#1
4
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.
数据参数仅是连接时提供的参数,以防您需要信号处理程序的额外状态。