2011-07-09 8 views
0

私はWindowsとLinux上で動作するpygtkアプリケーションを持っています。メインGUIは、(ユーザーがウィンドウ上の[X]ボタンをクリックする)削除イベントから呼び出される関数を閉鎖またはファイル - を経由して、メニュー>からコードがこのpygtk appはwin32のdeleteイベントで終了しません

def close_down(self): 
    self.hide_gui() 
    #do some cleanup stuff here, close down a log file etc... 
    gtk.main_quit() 

def on_close_down_activate(self, widget): # From menu 
    self.close_down() 
    print("Closed") 

def on_main_gui_delete_event(self, window, event): # From window X button 
    self.close_down() 
    print("Closed") 

のように見えます

終了しましたしかし、ユーザーがウィンドウのXボタンをクリックすると、 "Closed"という単語がcmd行に出力されますが、タスクマネージャーを使用してPythonを終了しない限り、アプリケーションはハングし、決してcmd行を制御しません。ユーザーがファイルメニューからQuitを選択すると、アプリケーションは単語「Closed」を表示し、制御をcmd行に返します。

Linuxでは、期待どおり動作します。ウィンドウ上のgtkはいくつかのことを続けていますか?

答えて

1

PyGTKでアプリケーションを閉じるには、実際には2つのコード行が必要です。私の推測では、Linuxでは、ウィンドウは閉じていますが、プロセスは終了していません。 Windowsでは、何も閉じていません。

この問題を修正するには、ちょうどこのコードの

return False 

理由はPyGTKの中で、あなたが作成するために、このラインを活用できる、ということです「()gtk.main_quit」の下に次の行を追加し、「よろしいですあなたはやめたいですか? "ダイアログ。行が "return true"を読んだ場合、プログラムはまったく閉じませんでした。

関連する問題