我正在开发一个项目,由于任务延迟,函数正在抛出wx.pyDeadObject Error
。
我已经在wx you can check if the c++ object still exsists by running if self:
中读过,但这在wxPython 3.0.2中不再有用。使用wx 3。
我已将功能修改为以下内容:
def SetData(self, delayedResult):
if not self or not self.list:
return
data = []
torrents = delayedResult.get()
for torrent in torrents:
data.append((torrent.infohash, [torrent.name], torrent, ThumbnailListItemNoTorrent))
self_exist = True
list_exists = True
if not self:
self_exist = False
if not self.list:
list_exists = False
try:
self.list.SetData(data)
self.list.SetupScrolling()
except wx.PyDeadObjectError:
print "Self existed: %s and self.list existed: %s" % (self_exist, list_exists)
它已经传递了第一个if语句,但由于delayedResutlt.get()
阻塞,我添加了额外的try除外(我还尝试在函数开头重复if语句,但是没有工作)。
当我运行其中一个单元测试时,Self existed: True and self.list existed: True
证实了我的怀疑。 documentation of 3.0.3说这应该存在。
如何测试wxPython中是否删除了wx对象的c ++部分?
答案 0 :(得分:3)
事实证明,与wx 2.8相比,在调用wx.Yield()
或类似内容后,您首先必须Destroy()
。然后事件被处理和销毁。
在所有情况下,使用bool(object)
将评估为True
或False
,具体取决于对象是否仍然有效。