おそらくpygtkプログラミングの基本的なものが欠けていますが、信号をたとえばanに接続し、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ネイティブの方法が必要です(例のボタンをクリックしたとき)。私はこれを一度行う方法に出くわしたと確信していますが、もう一度それを見つけることに迷っています。
また、完全に明確にするために、ウィジェットを有効にすることを許可する必要があります。