2013-12-18 184 views
2

我有一個wxPython應用程序,它運行這樣:wxpython如何退出Mainloop?

if __name__ == "__main__": 
    app = wx.App(False) 
    frame = MainWindow("Application") 
    frame.Show() 
    app.MainLoop() 

有應用程序的菜單欄上的「退出」菜單項,結合:

def onExit(self, event): 
    """""" 
    self.Close() 
  • 當「退出」被點擊,究竟發生了什麼?
  • 當「退出」被點擊時,app.MainLoop()會發生什麼?
  • 點擊框架窗口右上方的「X」按鈕,與點擊「退出」按鈕的 相同?
  • 爲什麼當python.exe * 32進程結束時點擊「X」按鈕,並且 我點擊「X」按鈕後如何終止python.exe * 32進程?
  • 爲什麼不將其打印"ok"當我如果我運行該腳本 點擊「退出」這樣說:

    if __name__ == "__main__": 
        app = wx.App(False) 
        frame = MainWindow("Application") 
        frame.Show() 
        app.MainLoop() 
        print "ok" 
    
+0

考慮到你的問題中的幾個最後的項目符號:你的應用程序有任何機會有托盤圖標?我記得前段時間有類似的問題。類似於你的代碼適用於Windows 7,Python 2.7,wxPython 2.8。 – Fenikso

回答

2
  1. 當用戶點擊「退出」,到底發生了什麼?

    'exit'有一個事件綁定來調用onExit方法,它調用MainWindow的這個實例的close方法。這會調用一個EVT_CLOSE事件,你可以選擇綁定到這個並控制發生了什麼,如果你不綁定,它會調用Destroy方法來安全地銷燬窗口。

  2. 當「退出」被點擊時,app.MainLoop()會發生什麼?

    主循環將繼續處理事件,除非最後一個頂層窗口關閉,當mainlop結束時會發生這種情況。

  3. 點擊窗口右上方的「X」按鈕,點擊「退出」按鈕?

    它的類型與生成一個EVT_CLOSE事件相同,它具有與onExit綁定的EVT_CLOSE事件,如上所述。

  4. 爲什麼當我點擊「X」按鈕時python.exe * 32進程沒有結束,當我點擊「X」按鈕時如何終止python.exe * 32進程?

    它應該在所有頂級窗口關閉時結束,您仍然必須有一個頂級窗口存在。

  5. 當我點擊「退出」,如果我運行該腳本這樣

    通常會時,有沒有留下任何頂級窗口爲什麼不將其打印「OK」。

+0

OP正在討論的「退出」是一個菜單項。菜單項綁定到EVT_MENU,而不是EVT_CLOSE。 –

+0

對不起,我沒有直接提到EVT_MENU,我提到exit有一個綁定到onExit方法的事件(這是事件EVT_MENU),然後它聲明onExit方法調用EVT_CLOSE事件(當方法Close所謂的)。 – Yoriz