【问题标题】:How to introspectively connect handlers to signals?如何自省地将处理程序连接到信号?
【发布时间】:2011-07-13 16:41:18
【问题描述】:

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.Builder 子类?

提前感谢您的宝贵时间!

【问题讨论】:

    标签: python user-interface gtk pygtk introspection


    【解决方案1】:

    GtkBuilder 从 XML 中获取要连接的名称,它不搜索以“on”开头的方法。这意味着您的模型需要在 XML 中表示,无法将您在代码中实例化的小部件传递给 GtkBuilder。 Glade 有documentation on custom widgets

    【讨论】:

      猜你喜欢
      • 2017-12-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-23
      • 2017-12-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多