Python-Properties für pygtk-Widgets

Code-Stücke können hier veröffentlicht werden.
Antworten
fred.reichbier
User
Beiträge: 155
Registriert: Freitag 29. Dezember 2006, 18:27

Mittwoch 17. September 2008, 15:57

Hallo,

eigentlich wollte ich nur mal Metaklassen ausprobieren ;) Hab mich mal drangesetzt, Klassen in pygtk 'richtige' properties zu verpassen, d.h. button.label = "..." statt button.set_label("...").

Das hier ist dabei rausgekommen, ein Beispiel ist dabei.

Code: Alles auswählen

from gobject._gobject import _install_metaclass
_install_metaclass(GtkMeta)
ist dabei das Wichtigste; das sorgt dafür, dass die Metaklasse auch von gobject benutzt wird (Normale Python-Metaklassen wollen mit gobject irgendwie nicht). Damit das funktioniert, muss man allerdings anscheinend erstmal eine von der gtk-Klasse abgeleitete Klasse erstellen und diese benutzen. Es scheint auch wichtig zu sein, dass gtk erst nach obigem Aufruf importiert wird.

Alle Properties funktionieren leider nicht, weil einige set_*-Funktionen mehr als einen Parameter erwarten :/

Vielleicht kanns ja jemand brauchen. Über Kommentare zum Code würd ich mich auch freuen :D

Gruß Fred
Benutzeravatar
Trundle
User
Beiträge: 591
Registriert: Dienstag 3. Juli 2007, 16:45

Mittwoch 17. September 2008, 21:08

Nicht alles, was mit ``set_`` beginnt, ist automatisch ein Gtk-Property. Und so gesehen haben Gtk-Propertys (AFAIK) nur einen Wert. Bei einem Fenster gibt es beispielsweise ``default_size`` nicht als Gtk-Property, sondern nur ``default_width`` und ``default_height``. Wenn man also wirklich nur Gtk-Propertys als "echte" Propertys umsetzen mag, kann man auf das ``props``-Attribut eines Gtk-Objekts zurückgreifen, wordurch die Metaklasse wesentlich kürzer würde (siehe hier).
"Der Dumme erwartet viel. Der Denkende sagt wenig." ("Herr Keuner" -- Bertolt Brecht)
fred.reichbier
User
Beiträge: 155
Registriert: Freitag 29. Dezember 2006, 18:27

Donnerstag 18. September 2008, 12:49

Ah, danke, das ist natürlich viel schöner ;)
Antworten