我正在使用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()
答案 0 :(得分:0)
我在尝试了很长时间后自己发现了这个错误。我很抱歉没有提供完整的代码,因为它非常大。我遇到的问题是我没有检查
的状况“if isinstance(child,RB.RibbonPanel):”。
从json文件重新创建功能区。使用后,一切正常。