如何内省地将处理程序连接到信号



gtk.Builder能够识别GUI(在XML文件中描述)可以发出的所有信号,并且通过方法connect_signals()自动地匹配信号和处理程序。示例:

class Gui(gobject.GObject):
    def __init__(self):
        self.gui_file = "../data/gui.xml"
        builder = gtk.Builder()
        builder.add_from_file(self.gui_file)
        builder.connect_signals(self)
    def on_whatever_gui_event(self, widget, data=None):
        ...

在我的应用程序中,我有其他由非GUI对象生成的信号(它是我的模型[如MVC模式],当其内部状态发生变化时会发出信号),但需要由GUI处理。

我正试图找到一种方法,允许我自动连接到Gui实例以及我的自定义信号换句话说,我尽量不必手动将每个信号连接到它的处理程序。理想情况下,最终代码应该看起来像:

class Gui(gobject.GObject):
    def __init__(self, model_instance):
        self.gui_file = "../data/gui.xml"
        builder = gtk.Builder()
        builder.add_from_file(self.gui_file)
        builder.add_signals_from_my_object(model_instance)
        builder.connect_signals(self)
    def on_whatever_gui_event(self, widget, data=None):
        ...
    def on_whatever_model_event(self, widget, data=None):
        ...

是否有一种标准的[py]GTK方法来实现这一点,或者我是否必须编写自己的GTK子类。建设者

提前感谢您抽出时间!

GtkBuilder从XML中获取要连接的名称,它不搜索以"on"开头的方法。这意味着您的模型需要用XML表示,无法将您在代码中实例化的小部件传递给GtkBuilder。Glade有关于自定义小部件的文档。

相关内容

  • 没有找到相关文章

最新更新