我在我的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函数中看到的四行的几种不同组合,但它们都具有相同(缺乏任何)效果。
答案 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事件。这很有道理,但花了一段时间才弄明白。