gpt4 book ai didi

python - WxPython - 清除事件队列和未决任务

转载 作者:行者123 更新时间:2023-11-28 19:14:30 34 4
gpt4 key购买 nike

我正在做一个项目,其中 wxPython使用 (3.0.2.0),但是一些单元测试有时会失败,因为 wx 试图在它关闭后立即更新 GUI。

在关闭一切的函数中,一个wx.SafeYield(onlyIfNeeded=True)首先放置以确保事件队列为空。然后一些线程被杀死并运行以下循环:

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()

然而,在这个循环之后,显然延迟的 wx 调用(可能用 wx.CallLater 调用)仍然试图更新导致 <class 'wx._core.PyDeadObjectError'> PyDeadObjectError('The C++ part of the ArtworkPanel object has been deleted, attribute access no longer allowed.',) 的 GUI 元素。崩溃。

有没有办法清除这个 CallLater 队列?我看了一下 stopping the entire EventLoop也许重新启动它,但我什至不确定这是否有效,是否有更好的方法来做到这一点,也许使用 DeletePendingEvents

有没有办法取消 wx 中所有待处理的任务,这样当您退出应用程序时,没有(延迟的)函数会使应用程序崩溃?

最佳答案

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

关于python - WxPython - 清除事件队列和未决任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35413798/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com