空き地で作った箱を持っていAboutDialog
ますが、閉じるボタンが機能しません。このボタンは。というウィジェットにあるため、別の関数に接続する方法がわかりませんdialog-action_area
。
もう1つの問題は、ウィンドウマネージャーによって作成された閉じるボタンを使用すると、ウィンドウが破棄されたために再度開くことができないことです。
どうすればこれを変更して非表示にすることができますか?
他のダイアログ ウィンドウと同様に、次のことを行う必要があります。
最初のループはメイン ループをブロックし、ダイアログが応答を受け取るとすぐに戻ります。これは、アクション領域の任意のボタンをクリックするか、Esc キーを押すか、ダイアログの応答メソッドを呼び出すか、ウィンドウを「破棄」するか、最後のウィンドウが破棄されるという意味ではありません。これは、run() メソッドが終了して応答を返すことを意味します。このような:
response = dialog.run()
デバッガーを使用すると、ボタンをクリックするか、ダイアログを閉じようとするまで、メイン ループがそこにとどまることに気付くでしょう。応答を受け取ったら、必要に応じて使用できます。
response = dialog.run()
if response == gtk.RESPONSE_OK:
#do something here if the user hit the OK button
dialog.destroy()
2つ目は、ダイアログを非ブロッキングで使用できるようにするため、ダイアログを「応答」信号に接続する必要があります。
def do_response(dialog, response):
if response == gtk.RESPONSE_OK:
#do something here if the user hit the OK button
dialog.destroy()
dialog.connect('response', do_response)
ここで、ダイアログを破棄する必要があることに気付きました
削除またはキャンセルのシグナルを受け取ったら、ウィジェットの hide() メソッドを呼び出す必要があります。
response = self.wTree.get_widget("aboutdialog1").run() # or however you run it
if response == gtk.RESPONSE_DELETE_EVENT or response == gtk.RESPONSE_CANCEL:
self.wTree.get_widget("aboutdialog1").hide()
応答タイプの定数は、GTK のドキュメントで見つけることができます。