为什么这个非常简单的wxPython AUI应用程序会在启动时崩溃?

时间:2012-10-11 13:12:51

标签: python wxpython

我正在制作正则表达式测试工具。我希望它是一个简单的AUI应用程序,但在将我认为是AUI应用程序的核心从演示转移到我的代码之后,它在启动时崩溃了。我只能看到wxPython日志窗口在它消失之前的几分之一秒,并且代码在控制台中不会产生任何错误。

这是一个麻烦的框架。如果我注释掉所有_mgr行,则应用程序运行正常。

class RegexTesterFrame(wx.Frame):
    def __init__(self):
        wx.Frame.__init__(
            self, None, -1, 'Regex tester', (100, 100),
            (400, 400), wx.DEFAULT_FRAME_STYLE
        )

        self.initialize_components()
        self.CreateStatusBar()

    def initialize_components(self):
        self._mgr = wx.aui.AuiManager()
        self._mgr.SetManagedWindow(self)

        self._perspectives = []

        self._mgr.AddPane(
            wx.CheckBox(self, -1, 'test'),
            wx.aui.AuiPaneInfo().Name('Test pane').Caption('Test caption').Top()
        )

        self._mgr.Update()

        self.Bind(wx.EVT_CLOSE, self.on_close)

    def on_close(self, event):
        self._mgr.UnInit()
        del self._mgr
        self.Destroy()

以下是完整代码(~100行):http://pastebin.com/xZS2g1fq

以下是我正在使用的演示(大型):http://pastebin.com/G26BMYZx

我很好奇两件事 - 为什么应用程序崩溃,为什么wxPython应用程序崩溃时我没有得到任何错误输出。

1 个答案:

答案 0 :(得分:0)

我从昨天开始就一直在努力解决这个问题,但是像往常一样,我在StackOverflow上问这个问题的时候我就搞清楚了。首先,我让应用程序在消息框中输出错误信息而不是stderr:

def main():
    try:
        app = RegexTesterApp(True)
        app.MainLoop()
    except:
        import traceback
        xc = traceback.format_exception(*sys.exc_info())
        wx.MessageBox(''.join(xc))

然后错误显示wx.aui是我未导入的模块。导入它修复了崩溃。