GObject.add_emission_hookを使用して接続し、クラスのすべてのインスタンスのシグナルをキャッチしたいと思います。うまくいくようですが、一度だけです。以下の最小限の例では、ボタンの1つが何度クリックされても、「受信信号」は1回だけ印刷されます。それはなぜですか、クリックするたびに信号を受信するにはどうすればよいですか?
もちろん、私のアプリケーションでは物事はもっと複雑で、受信機(ここではクラス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()