PyGObject устанавливает дочерние свойства путем создания ParamSpecPython

Программы на Python
Ответить
Anonymous
 PyGObject устанавливает дочерние свойства путем создания ParamSpec

Сообщение Anonymous »

Я пытаюсь преобразовать библиотеку pygtk под названием etk.docking в pygobject. В рамках этого у меня есть класс Gtk.Container, дочерние свойства которого определены в словаре __gchild_properties__. Эти свойства объекта относятся не к контейнеру или содержащемуся в нем виджету, а к отношению. Библиотека также использует его для подключения к уведомлению дочернего виджета об обновлениях значения свойства.

Код: Выделить всё

__gchild_properties__ = {
'weight': (GObject.TYPE_FLOAT,
'item weight',
'item weight',
0,  # min
1,  # max
.2,  # default
GObject.ParamFlags.READWRITE
),
}
Затем я пытаюсь установить дочерние свойства, используя этот цикл for в приведенном выше словаре (

Код: Выделить всё

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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»