Использование GObject.add_emission_hook - PullRequest
0 голосов
/ 18 января 2010

Мне любезно предложили использовать add_emission_hook GObject после недавнего вопроса о SO , но я не могу найти пример использования.

кому-нибудь есть, чем поделиться, пожалуйста?

1 Ответ

0 голосов
/ 19 января 2010

После обсуждения с полезными людьми по 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")
...