我有一个我正在尝试开发的程序,但我想我不知道制作子帧的正确方法。我已经看过几个例子,但是当它关闭时似乎无法破坏框架。我得到以下错误读数(使用pycharm):
Exception wx._core.PyDeadObjectError: PyDeadObjectError('The C++ part of the
Choice object has been deleted, attribute access no longer allowed.',) in
<bound method pvFileINdialog.__del__ of <fileIO.pvFileIOGUIFileIOdialog.pvFileINdialog;
proxy of <Swig Object of type 'wxDialog *' at 0x340cc70> >> ignored
虽然口译员负责处理这个问题,但我想学习正确的解决方法。
如果我移动destroy和close命令,那么组合就不会改变结果。
感兴趣的代码是:
#in MainFrame.py:
def fileimport(self, event):
importprompt = pvFileIOGUIFileIOdialog.pvFileINdialog(self)
importprompt.ShowModal()
importprompt.Destroy()
#referring to pvFileIOGUIFileIOdialog.pvFileINdialog :
class pvFileINdialog(pvFileIOGUI.FileINdialog):
def __init__(self, child):
pvFileIOGUI.FileINdialog.__init__(self, child)
#which refers to pvFileIOGUI.FileINdialog :
class FileINdialog(wx.Dialog):
def __init__(self, child):
wx.Dialog.__init__(self, child, id=wx.ID_ANY, title=u"Select Import Method...", pos=wx.DefaultPosition,
size=wx.Size(800, 600), style=wx.DEFAULT_DIALOG_STYLE)
#and is closed by this routine in pvFileIOGUIFileIOdialog.py:
def cancelclk(self, event):
self.Close()
return 0
答案 0 :(得分:0)
很难理解发生了什么,因为你的错误消息是指Choice
,但是你的代码根本没有显示任何选择,所以可能缺少某些内容,即问题可能在于你没有表现出来。但无论如何,调用Destroy()
是没有必要的,你不应该这样做,除非你有一些真正的理由(对吗?)。因此,我首先要从代码中删除对Destroy()
的所有来电。