在wxpython中定义wx.Panel析构函数

时间:2014-09-30 06:21:31

标签: python wxpython publish-subscribe

如何在wx.Panel中为wxpython定义析构函数?

META: 继承了使用wxpythonPyPubSub的代码库之后,我在wx.Panel__init__函数中发现了大量的pubsub订阅,这些订阅从未取消订阅并导致以后在程序中出错。

1 个答案:

答案 0 :(得分:1)

您应该能够绑定到EVT_WINDOW_DESTROY并在处理程序中执行unsub。

例如:

class MyPanel(wx.Panel):

def __init__(self, parent):
    wx.Panel.__init__(self, parent, wx.NewId())

    pub.subscribe(self.__handler, 'event')

    def __destroy(_):
        pub.unsubscribe(self.__handler, 'event')

    self.Bind(wx.EVT_WINDOW_DESTROY, __destroy)

如果上面不起作用,可以通过在尝试访问ExtendedWxPanel的代码中添加以下内容来防止PyDeadObjectError异常:

如果instanceOfExctendedWxPanel:   然后访问它或它的方法。