【问题标题】:How to make a plugin system using Libpeas for a Python3 Gtk application?如何使用 Libpeas 为 Python3 Gtk 应用程序制作插件系统?
【发布时间】:2016-06-13 13:23:25
【问题描述】:

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

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

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

【问题讨论】:

  • libpeas 只能扩展 C 项目,因为它依赖于 gobject-introspection。
  • gnome-introspection 实际上为许多不同的语言提供了语言绑定。就像 Python 的 Gtk。

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


【解决方案1】:

这是一个已知错误,正在 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()

【讨论】:

    猜你喜欢
    • 2012-01-23
    • 2020-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-22
    • 1970-01-01
    相关资源
    最近更新 更多