2016-06-13 1 views
0

J'essaye de faire une application dans Python3 avec Gtk et d'autres technologies de GNOME. Je veux implémenter un système de plugin (de préférence libpeas) mais il n'a pas de documentation pour python.Comment faire un système de plugin en utilisant Libpeas pour une application Python3 Gtk?

Par conséquent je traduisais le C examples, en python. Au point où je dois instancier PeasExtensionSet.
d'abord essayé,

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) 

Error: Expected GObject.Parameter, but got str

ensuite essayé,

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) 

Warning: can't peek value table for type '' which is not currently referenced.
Warning: gvalue.c:188: cannot initialize GValue with type '(null)', this type has no GTypeValueTable implementation
Warning: g_value_copy: assertion 'G_IS_VALUE (src_value)' failed

ensuite essayé,
param.value=window

Error: cannot set a structure which has no well-defined ownership transfer rules

Maintenant, je suis coincé ici. Toute aide serait appréciée.

+0

libpeas ne peuvent étendre les projets C car elle repose sur gobject-introspection. – TingPing

+0

gnome-introspection fournit réellement des liaisons de langage pour de nombreuses langues différentes. Comme Gtk pour python. – theawless

Répondre

0

Ceci est un bug connu et est attaqué here et here.

Nous pouvons le faire fonctionner avec quelques changements aki dans l'API et en faisant cela sur le signal 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()