在PyGTK/GtkBuilder中处理多个窗口
我想知道怎么把多个不同的窗口或对话框存储在一个GtkBuilder文件里,然后在不同的类中加载这些窗口(每个类对应一个不同的窗口)。比如,现在我做的事情是:
def __init__(self):
self.builder = gtk.Builder()
self.builder.add_from_file('gtkbuilder.xml')
self.welcome_dialog = self.builder.get_object('welcome_dialog')
self.builder.connect_signals(self)
self.welcome_dialog.show()
这样确实能运行出一个软件,但它会发出各种警告,比如:
welcome_dialog.py:38: RuntimeWarning: missing handler 'on_contract_window_response'
self.builder.connect_signals(self)
这是因为我在Glade中为所有其他窗口定义的信号处理程序。我想做的就是只连接这个单一窗口/对话框的信号,忽略其他的,但我不太确定怎么做。或者说我可能做错了,应该把每个窗口分成不同的GtkBuilder文件?还是说应该在一开始就连接所有可能窗口的信号?
1 个回答
7
使用 gtk.Builder.add_from_file
方法会把你文件里的所有内容都添加到 Builder 对象中,这就是你收到信号连接警告的原因;因为 builder.connect_signals()
这个调用会尝试连接所有的东西。
相反,你可以使用 gtk.Builder.add_objects_from_file
方法,这样你就可以选择你想在当前类中处理的具体窗口或控件。