5

空き地で作った箱を持っていAboutDialogますが、閉じるボタンが機能しません。このボタンは。というウィジェットにあるため、別の関数に接続する方法がわかりませんdialog-action_area

もう1つの問題は、ウィンドウマネージャーによって作成された閉じるボタンを使用すると、ウィンドウが破棄されたために再度開くことができないことです。

どうすればこれを変更して非表示にすることができますか?

4

2 に答える 2

6

他のダイアログ ウィンドウと同様に、次のことを行う必要があります。

  1. run メソッドを使用します。
  2. 「応答」シグナルを利用する

最初のループはメイン ループをブロックし、ダイアログが応答を受け取るとすぐに戻ります。これは、アクション領域の任意のボタンをクリックするか、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)

ここで、ダイアログを破棄する必要があることに気付きました

于 2009-05-23T03:56:13.463 に答える
5

削除またはキャンセルのシグナルを受け取ったら、ウィジェットの 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 のドキュメントで見つけることができます。

于 2009-02-23T13:22:15.970 に答える