简体   繁体   English

pygtk glade问题:为什么这个简单的脚本不工作?

[英]pygtk glade question: why isn't this simple script working?

I've been writing writing a small pygtk application using glade to put together the UIs. 我一直在编写一个使用glade编写一个小pygtk应用程序来组合UI。 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: 这是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. 奇怪的是,如果我取出signal_autoconnect(self)调用,窗口就会打开。 But if I replace that call with "self.on_TestClass_destroy(self, None, None)" instead, it returns the same NameError exception. 但是,如果我用“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? 以下代码是否适用于此处的任何人?

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. 数据参数仅是连接时提供的参数,以防您需要信号处理程序的额外状态。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM