私のアプリケーションでは、glib.timeout_add_seconds()のおかげで、GtkInfoBarsにタイムアウト(説明はhttps://stackoverflow.com/a/1309257/406281)を表示する関数を使用しています。pygtk glib.timeout_add():タイマーが破壊されていないかどうかを確認するには?
glib.timeout_add_seconds()は、関数がFalseを返すまで一定の間隔で呼び出される関数を設定するはずです。
私はそれをしていませんが、すべて期待どおりに動作します。それは完全にシンプルです。ここに私のコード:
def infobar(self, message, msgtype=gtk.MESSAGE_INFO, timeout=5):
bar = gtk.InfoBar()
bar.set_message_type(msgtype)
bar.add_button(gtk.STOCK_OK, gtk.RESPONSE_OK)
bar.connect("response", lambda *args: bar.hide())
self.vb2.pack_end(bar, False, False)
label = gtk.Label()
label.set_markup(message)
content = bar.get_content_area()
content.add(label)
label.show()
bar.show()
if timeout:
glib.timeout_add_seconds(timeout, bar.hide)
です。質問時間。最後の行で何をしたかを見てください。簡単に言えば、これは大丈夫ですか? bar.hide()への2回目の呼び出しが失敗した後、タイムアウトは自動的に破棄されますか?あるいは、資源を使い切って5秒ごとに目を覚ます余分な中和タイムアウトを蓄積していますか?補遺として
:
私は疑うように、これは悪いです、と私は本当にタイムアウトを破壊するためにFalseを返す必要がない、場合、私はいくつかの助けを必要とする - 私はできませんこれらの条件を満たすためにコードをどのように使いこなすかを理解する:複数のInfoBarsを同時に有効にする必要があり、それぞれが独自のタイマーとボタン応答信号(コードが今のように)に接続された状態でOR前回のInfoBarを置き換えるために、新しいInfoBarがそれぞれ必要です(前のInfoBarからタイマーを継承せずにこれを行う方法を理解できません。
読んでいただきありがとうございます! bar.hide
ああ!驚くばかり!私はPythonとgtkの新機能ですので、hideとvs destroyの説明に感謝します。そして、glib.source_remove情報で、私は選択肢があります。私はあなたが話している使いやすさのトレードオフという決定に苦労していました...私は分かりません。私は、情報バーを使用するgtkアプリのいくつかの例を探したいと思います。うーん。とにかく、もう一度ヨハネスに感謝! – rsaw