2012-03-26 12 views
1

Gibt es einen Mechanismus für die Datenbindung (wie in WPF) in GTK (um genau zu sein pygtk)? möchte ich dieses hässliche Code loszuwerden:GTK Datenbindung

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() 

und haben etwas Ähnliches wie folgt aus:

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

Wenn ich geändert self.foo, mein gtk Objekt "foo" würde kehrt umge zu und ändern.

Antwort

1

könnten Sie Eigenschaften verwenden:

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") 

Dies zu GTK völlig unabhängig ist. Es ist nur die Python-Methode, um Eigenschaften zu definieren.

0

GTK-Widgets verwenden GObject-Eigenschaften, die can be bound. Leider wird dies dem veralteten PyGTK wahrscheinlich nicht hinzugefügt. Das neuere GObject-Introspection hat es, aber nur in gebrochener Form, es sei denn, Sie haben eine sehr aktuelle Version.

Jetzt sind Sie besser dran, Ihre eigenen wie Sven rollen, oder mit einer Bibliothek wie gtkmvc.