GtkBuilder从XML中获取要连接的名称,它不搜索以"on"开头的方法。这意味着您的模型需要用XML表示,无法将您在代码中实例化的小部件传递给GtkBuilder。Glade有关于自定义小部件的文档。
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子类。建设者
提前感谢您抽出时间!