PyGObject installiert untergeordnete Eigenschaften durch Erstellen von ParamSpecPython

Python-Programme
Anonymous
 PyGObject installiert untergeordnete Eigenschaften durch Erstellen von ParamSpec

Post by Anonymous »

Ich versuche, eine Pygtk-Bibliothek namens etk.docking in Pygobject zu konvertieren. Als Teil davon habe ich eine Gtk.Container-Klasse, deren untergeordnete Eigenschaften in einem __gchild_properties__-Wörterbuch definiert sind. Diese Objekteigenschaften sind nicht spezifisch für den Container oder das enthaltene Widget, sondern für die Beziehung. Die Bibliothek verwendet es auch, um eine Verbindung zur Benachrichtigung des untergeordneten Widgets für Aktualisierungen des Eigenschaftswerts herzustellen.

Code: Select all

__gchild_properties__ = {
'weight': (GObject.TYPE_FLOAT,
'item weight',
'item weight',
0,  # min
1,  # max
.2,  # default
GObject.ParamFlags.READWRITE
),
}
Ich versuche dann, die untergeordneten Eigenschaften mithilfe dieser for-Schleife im obigen Wörterbuch zu installieren (

Code: Select all

DockPaned
ist der Container):

Code: Select all

for index, (name, pspec) in enumerate(six.iteritems(DockPaned.__gchild_properties__)):
pspec = list(pspec)
pspec.insert(0, name)
Gtk.ContainerClass.install_child_property(DockPaned, index + 1, tuple(pspec))
Von der letzten Zeile erhalte ich einen

TypeError: argument pspec: Expected GObject.ParamSpec, but got tuple

Ich verstehe, dass integrierte GObject-Klasseneigenschaften das GObject verwenden. ParamSpec als Objektstruktur zur Aufnahme der Eigenschaften. Was ich nicht sehe, ist eine Möglichkeit in PyGObject, meine eigene ParamSpec zu erstellen.
Für normale Eigenschaften verwendet das PyGObject-Benutzerhandbuch GObject.Property als Dekorator, um neue Eigenschaften zu erstellen. Das Python GTK+3-Tutorial zeigt auch die Verwendung von GObject.Property als Konstruktor zum Erstellen der Eigenschaft, zeigt auch seine Verwendung als Dekorator und eine ausführliche Wörterbuchform. Untergeordnete Eigenschaften werden jedoch nicht erwähnt.
Dinge, die ich versucht habe:
  • Bei der Suche nach der API (pgi-docs) für einen GObject.ParamSpec-Konstruktor weiß ich nicht, wie ich einen erstellen kann, es sei denn, ich habe ihn zuerst in C als Struktur erstellt und ihn dann irgendwie an pygobject zurückgegeben.
  • Diese Gewichtseigenschaft direkt für das Kind definieren Objekt. Dies funktioniert nicht, da ich dann die Fehlermeldung erhalte, dass die untergeordnete Eigenschaft nicht vorhanden ist, da eine untergeordnete Eigenschaft nicht mit einer auf ein untergeordnetes Objekt angewendeten Eigenschaft identisch ist.
  • Suche in der API nach Alternativen zu install_child_property, die keine ParamSpec erfordern, damit ich das von mir definierte Tupel verwenden kann.

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post