我可能在我的pygtk编程中缺少一些基本的东西,但我想要将信号连接到一个gtk.Entry
,然后让它只发出连接的信号,当我允许它这样做。手动切换小部件在pygtk中发出信号的能力
也就是说,我要的东西在这个最小的代码(仅适用于交互式使用)添加到toggle_signalling
使Hello
只印信令“允许”时:
import gtk
signal_states = ['On', 'Off']
signal_state = True
def reporter_function(*args,**kwargs):
print "Hello"
def toggle_signaling(widget, **kwargs):
global signal_state
signal_state = not signal_state
widget.set_label(signal_states[signal_state])
print ['Emit allowed', 'Emit not allowed'][not signal_state]
w = gtk.Window()
e = gtk.Entry()
b = gtk.Button(label=signal_states[signal_state])
hbox = gtk.HBox()
hbox.pack_start(e)
hbox.pack_end(b)
e.connect("changed", reporter_function)
b.connect("clicked", toggle_signaling)
w.add(hbox)
w.show_all()
我以前让有是这种发送信号状态的布尔标志,例如self._updating
在我的自定义小部件类中,并让回调函数在做任何事之前检查这个状态。这不是我想要的。
我想要一个gtk原生的方式让小部件知道它不应该发送信号(当我点击示例中的按钮时)。我很确定我已经偶然发现了一次这样做,但我迷失了再次找到它。
另外,要明确地说,仍然必须允许启用小部件。
完美!它确实是我正在寻找的'widget.handler_block'和'widget.handler_unblock'。 – deinonychusaur