我可能在pygtk编程中遗漏了一些基本的东西,但是我想将一个信号连接到例如gtk.Entry
上,然后让它只在我允许的情况下发出连接的信号。在
也就是说,我想在这个最小的代码中向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原生的方式,让小部件知道它不应该发送信号(当我在示例中单击按钮时)。我很确定我曾经偶然发现过一种方法来做这件事,但我又一次迷失了方向。在
另外,为了绝对清楚,必须仍然允许启用小部件。在
我不认为有办法绕过布尔标志。小部件是否允许发出信号是附加的应用程序逻辑,因此必须保存在某处。}在gtk2和Gtk3中的作用完全相同。在
根据您之前对该主题的研究以及您最可能正在寻找的chapter 20.1.2 of the PyGTK tutorial功能的非常精确的描述。
我把全面的示例代码放在一起。除了布尔指示符之外,唯一要保留的是连接信号的
handler_id
。正如您可能注意到的,它是在Gtk3中编程的,但是重要的方法handler_block
和{相关问题 更多 >
编程相关推荐