在wxpython中恢复wxribbon GUI状态时如何解决PyDeadObjectError

时间:2014-02-02 11:38:28

标签: python json user-interface wxpython ribbon

我正在使用wxpybbon的wxribbon构建GUI。 wxribbon是动态的,用户可以添加页面和面板。当用户关闭功能区时,我会在销毁功能区之前在json文件中保存名称和页数和面板数。在恢复状态时,我从json文件读取并重新创建我的功能区状态,但是当用户现在想要更改功能区面板时,只有最后重新创建的面板工作,并且对于最后一个面板之前的所有面板,我得到以下错误:< / p>

 **self.Bind(wx.EVT_MENU, lambda event: self.RemoveGroupBox(event, panel), RemoveGroupBox)
  File "C:/Users/Samyak/Desktop/Japan_SRC/test/src/GUI/Trial Ribbon.py", line 327, in RemoveGroupBox
    for child in newpanel.GetChildren():
  File "C:\Python27\lib\site-packages\wx-2.8-msw-unicode\wx\_core.py", line 14619, in __getattr__
    raise PyDeadObjectError(self.attrStr % self._name)
wx._core.PyDeadObjectError: The C++ part of the RibbonPanel object has been deleted, attribute access no longer allowed.**

我用来恢复我的功能区状态的代码如下:请帮助我......非常感谢

    if os.path.exists(CONFIGFILE):
        with open(CONFIGFILE, 'r') as f:
            data = json.load(f)
        self.newpanel = []
        for Page in data['pages']:
            label = Page['label']
            name = Page['name']
            newpage = RB.RibbonPage(self._ribbon,wx.ID_ANY, Page['label'],Bitmap("eye.xpm"))
                for panels in Page['Panel']:
                    pagelabel = panels['labelpanel']
                    self.newpanel.append(RB.RibbonPanel(newpage,wx.ID_ANY,pagelabel,Bitmap("selection_panel.xpm")))
                    length = len(self.newpanel)
                    self.newpanel[length-1].Bind(wx.EVT_RIGHT_UP, lambda event: self.RightClickRibbonPageBox(event, self.newpanel[length-1]))                

        currentpage = data['activepage']
        self._ribbon.SetActivePage(currentpage)
        self._ribbon.Realize()

1 个答案:

答案 0 :(得分:0)

我在尝试了很长时间后自己发现了这个错误。我很抱歉没有提供完整的代码,因为它非常大。我遇到的问题是我没有检查

的状况

“if isinstance(child,RB.RibbonPanel):”。

从json文件重新创建功能区。使用后,一切正常。