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

时间:2016-02-18 11:27:17

标签: python python-2.7 wxpython wxwidgets

我正在开发一个项目,由于任务延迟,函数正在抛出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 ++部分?

1 个答案:

答案 0 :(得分:3)

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

在所有情况下,使用bool(object)将评估为TrueFalse,具体取决于对象是否仍然有效。