好的,我有一个小测试程序:
这是我通过gtk.Builder加载的文件
<object class="GtkWindow" id="mainWindow">
<property name="default_width">500</property>
<property name="default_height">250</property>
<signal name="delete_event" handler="endProgram" />
</object>然后我用这个:
def endProgram ():
print "end";
rofl = gtk.Builder();
rofl.add_from_file("mainwindow.ui");
win = rofl.get_object("mainWindow");
rofl.connect_signals("mainWindow");
win.show_all();
gtk.main();然而,当我去运行时,它会抱怨我缺少了一个mainWindow对象的处理程序。我也试过做rofl.connect_signals(win);
发布于 2010-08-01 01:51:01
按照医生们,connect_signals使用映射或实例作为参数,以及
使用Python的内省特性查看键(如果对象是映射)或属性(如果对象是实例),并尝试将它们与接口描述中给出的信号处理程序名称匹配。每个匹配的键或属性引用的回调都连接到它们的匹配信号。
例如,当您传递"mainwindow" (这是str的一个实例)时,属性是例如upper、lower、isalpha之类的方法名称--与您可能感兴趣的任何事情无关。你为什么还要win的属性来处理信号呢?你认为connect_signals对 do 有什么影响?
例如,在这个所以问题和本教程中,可以找到一个更典型的示例用法,其中提供了以下Python示例:
class TutorialTextEditor:
def on_window_destroy(self, widget, data=None):
gtk.main_quit()
def __init__(self):
builder = gtk.Builder()
builder.add_from_file("tutorial.xml")
self.window = builder.get_object("window")
builder.connect_signals(self) 正如您所看到的,在这里,connect_signals是以典型的方式使用的--即用on_window_destroy方法传递对象(self),该方法(通过内省)将用作窗口破坏时产生的信号的处理程序。
https://stackoverflow.com/questions/3380426
复制相似问题