我正在尝试转换一个名为pygtk的库etk.停靠到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
是Container
):
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
我知道内置的GObject类属性使用GObject。ParamSpec
作为保存属性的对象结构。我在PyGObject中没有看到创建自己的ParamSpec
的方法。你知道吗
对于普通属性,《PyGObject用户指南》使用GObject.Property作为装饰符来创建新属性。Python GTK+3 Tutorial还显示了使用GObject.Property
作为构造函数来创建属性,还显示了它作为装饰器和详细字典形式的用法。但是,没有提到子属性。你知道吗
我尝试过的事情:
GObject.ParamSpec
构造函数搜索API(pgi docs)时,我不知道如何创建一个构造函数,除非我首先在C中创建它作为一个结构,然后以某种方式将它传递回pygobject。你知道吗install_child_property
的任何不需要ParamSpec
的替代项,以便使用我定义的元组。你知道吗
目前没有回答
相关问题 更多 >
编程相关推荐