wxPython 检查c++部分是否被删除

Goo*_*oey 3 python wxwidgets wxpython python-2.7

我正在处理一个项目,其中一个函数wx.pyDeadObject Error由于任务延迟而抛出 a 。

我在 wx 中读到过,您可以通过运行来检查 c++ 对象是否仍然存在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)
Run Code Online (Sandbox Code Playgroud)

它已经通过了第一个 if 语句,但是由于delayedResutlt.get()阻塞,我添加了额外的 try except (我也尝试在函数的开头复制那个 if 语句,但是没有用)。

在运行其中一项单元测试时,我得到了Self existed: True and self.list existed: True证实我的怀疑。3.0.3文档说这应该存在。

如何测试 wxPython 中 wx 对象的 c++ 部分是否已被删除?

Goo*_*oey 5

事实证明,与 wx 2.8 相比,你首先必须wx.Yield()在调用Destroy()或类似的东西之后。然后事件被处理和销毁。

在所有情况下, usingbool(object)将评估为TrueFalse取决于对象是否仍处于活动状态。