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

时间:2016-06-13 13:23:26

标签: python python-3.x plugins gnome gnome-3

我正在尝试使用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

  

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

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

1 个答案:

答案 0 :(得分: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()