Я хочу использовать GObject.add_emission_hook для подключения, чтобы поймать сигнал всех экземпляров класса. Вроде работает, но только один раз. В приведенном ниже минимальном примере «сигнал получен» печатается только один раз, независимо от того, сколько раз была нажата одна из кнопок. Почему так и как я могу получать сигнал о каждом клике?
Конечно, в моих приложениях все сложнее, и получатель (здесь класс Foo) не знает объекты, излучающие сигналы. Поэтому подключение к сигналам самих объектов невозможно.
from gi.repository import Gtk
from gi.repository import GObject
class MyWindow(Gtk.Window):
def __init__(self):
Gtk.Window.__init__(self, title="Hello World")
vbox = Gtk.VBox()
self.add(vbox)
button = Gtk.Button(label="Click Here")
vbox.pack_start(button, True, True, 0)
button = Gtk.Button(label="Or There")
vbox.pack_start(button, True, True, 0)
self.show_all()
class Foo:
def __init__(self):
GObject.add_emission_hook(Gtk.Button, "clicked", self.on_button_press)
def on_button_press(self, *args):
print "signal received"
win = MyWindow()
foo = Foo()
Gtk.main()