2010-01-18 51 views
0

我被引導使用GObject's "add_emission_hook"後面recent question on SO,但我似乎無法找到一個用法示例。GObject.add_emission_hook用法

有沒有人有一個共享,請?

+0

我只能找到與谷歌的於codesearch,http://google.com/codesearch舉幾個例子? hl = en&lr =&q =「add_emission_hook」+ lang:python&sbtn =搜索或koders,http://www.koders.com/default.aspx?s="add_emission_hook"&submit=Search&la=Python&li=*,但也許他們可以幫你? – 2010-01-18 19:24:39

+0

據我所知,除了傳遞一個類作爲第一個參數外(PyGTK版本也接受一個對象;我認爲它會自動爲您提供類),您可以像使用«object».connect一樣使用它)。因此,對於您提到的特定示例,它將是gobject.add_emission_hook(Car,'engine-started',myCallback)。 雖然我從來沒有真正使用它,所以我可能是錯的。 – 2010-01-18 23:10:26

回答

0

在IRC#pygtk有益的人經過討論,這裏是我想出了:

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