Code: Select all
__gchild_properties__ = {
'weight': (GObject.TYPE_FLOAT,
'item weight',
'item weight',
0, # min
1, # max
.2, # default
GObject.ParamFlags.READWRITE
),
}
Code: Select all
DockPanedCode: 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))
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.
Mobile version