WxPython - 清除事件队列和待处理任务

时间:2016-02-15 16:02:06

标签: python python-2.7 wxpython wxwidgets

我正在使用-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中的所有待处理任务,这样当您退出应用程序时,没有(延迟)函数会使应用程序崩溃?

1 个答案:

答案 0 :(得分:0)

嗯,我所掌握的信息并不多,而且还未经测试,但是正如您所建议的,DeletePendingEvents似乎可以解决问题。在强迫对话框/窗口结束/销毁的循环中,可以调用item.DeletePendingEvents()。该文档似乎有些乐观,但是是否将callLater订阅为队列事件?我不能确定。