如何在unittest中销毁wxPython框架

时间:2015-10-22 23:24:32

标签: python wxpython python-unittest

我在我的wxPython GUI上运行unittests。测试大致按预期工作,除了我创建的帧不会消失。在我的测试结束时,我有30个或更多顶级窗口。这是我的setUp和tearDown代码:

def setUp(self):
    self.app = wx.App()
    self.frame = MyGridFrame()

def tearDown(self):
    self.frame.Destroy()
    for wind in wx.GetTopLevelWindows():
        wind.Destroy()
    self.app.Destroy()

我尝试了在tearDown函数中看到的四行的几种不同组合,但它们都具有相同(缺乏任何)效果。

1 个答案:

答案 0 :(得分:0)

这是一个tearDown函数,可以从文档中正常工作: https://github.com/wxWidgets/Phoenix/blob/master/unittests/wtc.py

def tearDown(self):
    def _cleanup():
        for tlw in wx.GetTopLevelWindows():
            if tlw:
                tlw.Destroy()
        wx.WakeUpIdle()
        #self.app.ExitMainLoop()   
    wx.CallLater(50, _cleanup)
    self.app.MainLoop()
    del self.app

据推测,事件循环必须运行才能实际捕获并处理通过调用window.Destroy()生成的close事件。这很有道理,但花了一段时间才弄明白。