2014-02-22 105 views
1

我注意到一些Exceptions通常被主代碼except:捕捉到,在這段代碼的末尾,其他一些沒有(1/0OnButton)。爲什麼?簡單的GUI應用程序中有多少個線程?

這是否說明OnButton(self, evt)是在另一個線程中啓動的?

使用wxPython在一個簡單的GUI應用程序中涉及多少個線程?

import wx 

class MyFrame(wx.Frame): 
    def __init__(self, parent): 
     wx.Frame.__init__(self, parent, title="Test", size=(300, 300)) 
     MyPanel(self) 

class MyPanel(wx.Panel): 
    def __init__(self, parent): 
     wx.Panel.__init__(self, parent) 
     button = wx.Button(self, wx.ID_ANY, "Test") 
     self.Bind(wx.EVT_BUTTON, self.OnButton) 
     #1/0  here this line would be handled by the try/except below 

    def OnButton(self, evt): 
     1/0  # when you click on button, why isn't this handled by the exception hanlder?  

try: 
    app = wx.App(False) 
    MyFrame(None).Show() 
    app.MainLoop() 
except Exception, e: 
    print 'Hello' + type(e).__name__  
+1

偉大的問題。這是非常直觀的,它是如何工作的,我發現當我開始輸入我認爲是的答案時,我無法清楚地描述它,所以我意識到我也完全不理解它。我想你知道你可以用sys.excepthook捕獲onButton異常,但這不是你問的,我知道。 – GreenAsJade

回答

3

只有一種參與與wxPython的 一個簡單的GUI應用程序的線程看看下面的鏈接。

why you can't use a global exception handler wrapped around the call to the app object's MainLoop method

+0

謝謝你的這個鏈接。爲了在這個SO主題中有一個例子,你是否知道一個解決方案,在我的例子結尾處用'try/except'異常處理程序處理'1/0'的代碼? – Basj

+0

在http://wiki.wxpython.org/C++%20&%20Python%20Sandwich中,我看到如何使用'class ExceptionLogging'來記錄異常,但也可以將這些異常重定向到主要的try /除最後2行我的代碼? – Basj

+0

在下面的鏈接中存在一個錯誤,建議使用sys.excepthook https://groups.google.com/forum/#!topic/wxpython-users/IXFsH9vKQMQ – Yoriz

相關問題