如何使用gtk.Builder.connect_signals仅连接来自一个窗口的信号?

时间:2015-12-01 12:25:42

标签: python gtk pygtk glade

我正在使用Glade和Python 3开发GUI应用程序。我在Glade中设计了UI;它包含一个主应用程序窗口和一个自定义对话框,其中包含用户单击指定按钮时显示的某些信息。对话框有自己的类,我们称之为InfoDialog;它的构造函数处理创建对话框窗口并显示它。该类还具有与对话框中的小部件发送的信号相对应的方法;例如,有一个“取消”按钮,信号(和类中的处理程序方法)被称为on_cancelButton_clicked

问题是我想在InfoDialog的构造函数中基于每个实例连接此信号,并将self指定为用户数据,以便InfoDialog.on_cancelButton_clicked收到所有参数可以对InfoDialog的实例采取行动。问题是,当我创建主窗口后连接信号时,Gtk.builder希望我在那里提供所有信号处理程序,不仅是主窗口,还有InfoDialog和它的子节点 - 通常用于UI .xml文件中定义的每个单个信号。

除了为每个孩子手动调用widget.connect()之外,我该怎么做才能解决这个问题?

1 个答案:

答案 0 :(得分:2)

通常的方法是将不同窗口/对话框的UI定义拆分为单独的XML文件。

如果您不想这样做,可以使用Gtk.Builder.connect_signals_full(),并传递仅连接您要连接的信号的自定义function