2010-01-18 18 views
0

J'ai été obligé d'utiliser GObject's "add_emission_hook" suite à un recent question on SO mais je n'arrive pas à trouver un exemple d'utilisation.GObject.add_emission_hook utilisation

Quelqu'un en at-il un à partager, s'il vous plaît?

+0

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? –

+0

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. –

Répondre

0

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")