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

How can I use gtk.Builder.connect_signals to only connect signals from one window?

我正在使用 Glade 和 Python 开发 GUI 应用程序 3. 我在 Glade 中设计了 UI;它由一个主应用程序 window 和一个自定义对话框组成,其中包含当用户单击指定按钮时显示的某些信息。该对话框有自己的class,我们称它为InfoDialog;它的构造函数负责创建对话框 window 并显示它。 class 也有对应于对话框中小部件发送的信号的方法;例如,有一个 "Cancel" 按钮,信号(以及 class 中的处理程序方法)称为 on_cancelButton_clicked

问题是我想在 InfoDialog 的构造函数中以 per-instance 为基础连接此信号,并将 self 指定为 user-data,以便 InfoDialog.on_cancelButton_clicked 接收所有参数并可以对 InfoDialog 的实例执行操作。问题是当我在创建主 window 后连接信号时,Gtk.builder 希望我在其中提供所有信号处理程序,而不仅仅是主 window,但是也适用于 InfoDialog 及其 children - 通常适用于 UI .xml 文件中定义的每个信号。

除了为每个 child 手动调用 widget.connect() 之外,我还能做些什么来解决这个问题?

通常的方法是将不同 windows/dialogs 的 UI 定义拆分到单独的 XML 文件中。

如果您不想这样做,您可以使用 Gtk.Builder.connect_signals_full(), and pass a custom function,它只连接您想要连接的信号。