对于我正在处理的项目,我使用的是自定义信号,这些自定义信号发送给子级,然后在信号未完全处理时传播给它父级。自定义信号不传播
根据我可以发现的信息,似乎在回调中没有连接处理程序(使用connect
)或返回False
应允许信号传播到小部件父项。
然而,在低于这个我的玩具例如不工作:
class MyWindow(Gtk.Window):
def __init__(self):
Gtk.Window.__init__(self)
GObject.signal_new("print-this", GObject.TYPE_OBJECT, GObject.SIGNAL_RUN_LAST, GObject.TYPE_BOOLEAN, [GObject.TYPE_STRING])
self.button = Gtk.Button.new_with_label("Emit signals")
self.button.connect("clicked", self.emit_signals)
self.frame = Gtk.Frame.new("Some frame")
self.frame.add(self.button)
self.add(self.frame)
self.connect("print-this", self.got_it)
self.show_all()
Gtk.main()
def got_it(self, widget, string):
print string
return False
def emit_signals(self, *args):
print "Emitting signals.."
self.button.emit("print-this", "I was emitted from the button")
time.sleep(1)
self.frame.emit("print-this", "I was emitted from the frame")
time.sleep(1)
self.emit("print-this", "I was emitted from the window")
当信号发出我期望打印所有三个发射但我只得到窗口上的发出打印。这可能是由于信号根本没有传播。
那么我在哪里错了?更重要的是,我如何才能实现我正在寻找的传播行为?
信号与GObject类相关联。 'print-this'信号只存在于你的'MyWindow'类中,而不是'GtkButton'或'GtkFrame',所以'self.button.emit()'和'self.frame.emit()'调用不存在信号。反正你什么也得不到;即使这些信号确实存在,也没有任何东西与他们连接。 – andlabs
我认为'GObject.signal_new'会将信号与所有GObject类关联,但根据您的评论,我认为这是错误的?那么我需要如何定义它们呢? (当然下一步将是他们如何传播?) – B8vrede
你认为信号如何工作? (我不知道Python,但我假设'GObject.'正在调用GObject类的'signal_new()'实例方法'self')。知道这可以帮助我清除你的误解。 – andlabs