我正在使用-fno-rtti
(3.0.2.0)的项目,但是有些单元测试不时失败,因为wx在关闭后尝试更新GUI。
在关闭所有内容的函数中,首先放置wxPython
以确保事件队列为空。然后杀死一些线程并运行以下循环:
wx.SafeYield(onlyIfNeeded=True)
然而,在这个循环之后,显然延迟的wx调用(可能用wx.CallLater调用)仍然试图更新GUI元素,导致for item in wx.GetTopLevelWindows():
if item != self:
if isinstance(item, wx.Dialog):
if item.IsModal():
item.EndModal(wx.ID_CANCEL)
else:
item.Destroy()
else:
item.Close()
self.Destroy()
崩溃。
有没有办法清除这个CallLater队列?我看了stopping the entire EventLoop并且可能重新启动它,但我甚至不确定它是否有效以及是否有更好的方法可以使用DeletePendingEvents?
有没有办法取消wx中的所有待处理任务,这样当您退出应用程序时,没有(延迟)函数会使应用程序崩溃?
答案 0 :(得分:0)
嗯,我所掌握的信息并不多,而且还未经测试,但是正如您所建议的,DeletePendingEvents
似乎可以解决问题。在强迫对话框/窗口结束/销毁的循环中,可以调用item.DeletePendingEvents()
。该文档似乎有些乐观,但是是否将callLater
订阅为队列事件?我不能确定。