如何在 unittest 中销毁 wxPython 框架
How to destroy a wxPython frame in unittest
我正在 运行 我的 wxPython GUI 上进行单元测试。测试大致按预期工作,除了我创建的帧不会消失。到我的测试结束时,我有 30 个或更多的顶级 windows。这是我的设置和拆卸代码:
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 函数中看到的四行的几种不同组合,但它们都具有相同的(没有任何)效果。
这是文档中的一个可以正常工作的 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()产生的关闭事件。这是有道理的,但我花了一段时间才弄明白。
我正在 运行 我的 wxPython GUI 上进行单元测试。测试大致按预期工作,除了我创建的帧不会消失。到我的测试结束时,我有 30 个或更多的顶级 windows。这是我的设置和拆卸代码:
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 函数中看到的四行的几种不同组合,但它们都具有相同的(没有任何)效果。
这是文档中的一个可以正常工作的 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()产生的关闭事件。这是有道理的,但我花了一段时间才弄明白。