如何解决wxpython中恢复wxbribbon GUI状态时的PyDeadObjectError问题

2024-06-02 05:34:55 发布

您现在位置:Python中文网/ 问答频道 /正文

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

 **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()

Tags: 用户nameinselfeventjson面板for
1条回答
网友
1楼 · 发布于 2024-06-02 05:34:55

经过长时间的努力,我自己也发现了这个错误。我很抱歉没有提供完整的代码,因为它实在是太大了。我遇到的问题是我没有检查

“如果存在(孩子,RB.带状面板):". 你知道吗

从json重新创建ribbon时文件。之后使用它一切都很好。你知道吗

相关问题 更多 >