如何使用 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,它只连接您想要连接的信号。
我正在使用 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,它只连接您想要连接的信号。