2012-03-26 75 views
1

是否有任何機制的數據綁定(如在WPF中)在GTK(精確pygtk)? 我想擺脫這種醜陋的代碼:GTK數據綁定

def set_foo(self,txt): 
    return self.gtkBuilder.get_object("foo").set_text(txt) 

def get_foo(self): 
    return self.gtkBuilder.get_object("foo").get_text() 

,並有一些與此類似:

self.foo = "text" 
self.gtkBuilder.get_object("foo").data_bind(self.foo) 

如果我改變self.foo,我的GTK對象"foo"將太,反之亦然改變。

回答

1

你可以使用屬性:

class X(object): 
    ... 
    def _make_property(name): 
     def getter(self): 
      return self.gtkBuilder.get_object(name).get_text() 
     def setter(self, text): 
      return self.gtkBuilder.get_object(name).set_text(text) 
     return property(getter, setter) 

    foo = _make_property("foo") 

這是完全無關的GTK。這只是定義屬性的Python方法。

0

GTK Widgets使用GObject屬性can be bound。不幸的是,這可能不會被添加到已棄用的PyGTK中。較新的GObject-Introspection有它,但只有在你有一個非常新的版本時纔會以破碎的形式出現。

現在,您最好是像斯文那樣自己滾動自己,或者使用像gtkmvc這樣的圖書館。