如何使用Libpeas为Python3 Gtk应用程序创建一个插件系统?

问题描述 投票:0回答:1

我正在尝试使用Gtk和其他GNOME技术在Python3中创建一个应用程序。我想实现一个插件系统(最好是libpeas),但它没有python的文档。

因此我将C examples翻译成python。在我必须实例化PeasExtensionSet的时候。 第一次尝试,

pset = Peas.ExtensionSet.new(engine, Peas.Activatable, ["window",window])
pset.connect("extension-added", self.on_extension_added, None)
pset.connect("extension-removed", self.on_extension_removed, None)

错误:期望GObject.Parameter,但得到str

然后试过,

param = GObject.Parameter()
param.name = "something"
pset = Peas.ExtensionSet.new(engine, Peas.Activatable, [param])
pset.connect("extension-added", self.on_extension_added, None)
pset.connect("extension-removed", self.on_extension_removed, None)

警告:无法查看当前未引用的类型''的值表。 警告:gvalue.c:188:无法初始化类型为'(null)'的GValue,此类型没有GTypeValueTable实现 警告:g_value_copy:断言'G_IS_VALUE(src_value)'失败

然后试过, param.value=window

错误:无法设置没有明确定义的所有权转移规则的结构

现在我被困在这里了。任何帮助,将不胜感激。

python python-3.x plugins gnome gnome-3
1个回答
0
投票

这是一个已知的错误,正在处理herehere

我们可以使用API​​中的一些hacky更改并在extension-added信号上执行此操作:

def on_extension_added(self, set, info, activatable):
    # main difference from how normal libpeas plugin system works
    activatable.set_object(self.public_object)
    activatable.activate()
© www.soinside.com 2019 - 2024. All rights reserved.