Après une discussion avec les gens utiles sur IRC#pygtk, voici ce que je suis venu avec:
import gobject
class Signals(gobject.GObject):
__gsignals__ = {
"lastfm_username_changed": (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, (gobject.TYPE_STRING,)) #@UndefinedVariable
}
def __init__(self):
gobject.GObject.__init__(self)
class Bus(object):
"""
Message Bus - Borg pattern
"""
_signals=Signals()
@classmethod
def emit(cls, name, *pa, **kwa):
cls._signals.emit(name, *pa, **kwa)
@classmethod
def add_emission_hook(cls, name, callback):
gobject.add_emission_hook(cls._signals, name, callback)
if __name__=="__main__":
def callback(self, data):
print "callback: data=%s" % data
Bus.add_emission_hook("lastfm_username_changed", callback)
Bus.emit("lastfm_username_changed", "jldupont")
Je ne pouvais trouver quelques exemples avec le codesearch de google, http://google.com/codesearch? hl = fr & lr = & q = "add_emission_hook" + lang: python & sbtn = Recherche, ou koders, http://www.koders.com/default.aspx?s="add_emission_hook"&submit=Search&la=Python&li=*, mais peut-être qu'ils peuvent T'aider? –
Pour autant que je sache, vous l'utilisez de la même façon que «object» .connect, sauf que vous passez une classe comme premier paramètre (la version PyGTK accepte aussi un objet, je pense qu'il prend automatiquement la classe pour vous). Donc, pour l'exemple particulier que vous avez mentionné, ce serait gobject.add_emission_hook (Car, 'engine-started', myCallback). Je ne l'ai jamais vraiment utilisé, donc je peux me tromper. –