Код: Выделить всё
__gchild_properties__ = {
'weight': (GObject.TYPE_FLOAT,
'item weight',
'item weight',
0, # min
1, # max
.2, # default
GObject.ParamFlags.READWRITE
),
}
Код: Выделить всё
DockPanedКод: Выделить всё
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: аргумент pspec: Ожидался GObject.ParamSpec, но получен кортеж
Я понимаю, что встроенные свойства класса GObject используют GObject. ParamSpec как объектная структура для хранения свойств. Чего я не вижу в PyGObject, так это способа создать свой собственный ParamSpec.
Для обычных свойств Руководство пользователя PyGObject использует GObject.Property в качестве декоратора для создания новых свойств. Учебное пособие по Python GTK+3 также показывает использование GObject.Property в качестве конструктора для создания свойства, а также показывает его использование в качестве декоратора и подробную словарную форму. Однако о дочерних свойствах не упоминается.
Что я пробовал:
- Ищу API (pgi-docs) для конструктора GObject.ParamSpec, я не понимаю, как его создать, если я сначала не создал его в C как структуру, а затем каким-то образом передал его обратно в pygobject.
- Определение этого свойства веса непосредственно дочернему элементу объект. Это не работает, так как я получаю ошибки о том, что дочернее свойство не существует, поскольку дочернее свойство не совпадает со свойством, примененным к дочернему объекту.
- Поиск в API любых альтернатив install_child_property, для которых не требуется ParamSpec, чтобы я мог использовать определенный мной кортеж.
Подробнее здесь: https://stackoverflow.com/questions/451 ... -paramspec
Мобильная версия