Python 在wx.FileDialog小部件中更改文件时发生运行时错误

Python 在wx.FileDialog小部件中更改文件时发生运行时错误,python,c++,runtime,wxpython,Python,C++,Runtime,Wxpython,我有一个GUI,要求用户从3个wx.FileDialog窗口打开3个xlsx文件。该程序运行良好,但是我得到一个运行时错误:如果我试图更改文件,FileDialog类型的包装C/C++对象已被删除。例如,在returnsReport文件对话框中,如果我打开错误的文件并去更改它,那就是我得到的错误。下面是代码的剪贴画,任何关于这个错误的帮助都会很好 class MainFrame(wx.Frame): def __init__(self): frame = wx.Frame

我有一个GUI,要求用户从3个wx.FileDialog窗口打开3个xlsx文件。该程序运行良好,但是我得到一个
运行时错误:如果我试图更改文件,FileDialog类型的包装C/C++对象已被删除。例如,在returnsReport文件对话框中,如果我打开错误的文件并去更改它,那就是我得到的错误。下面是代码的剪贴画,任何关于这个错误的帮助都会很好

class MainFrame(wx.Frame):
    def __init__(self):
        frame = wx.Frame.__init__(self, None, wx.ID_ANY, "Returns", size = (625,250))
        self.Center()
        panel = wx.Panel(self,wx.ID_ANY)

        box = wx.BoxSizer(wx.HORIZONTAL)
        menubar = wx.MenuBar()
        helpMenu = wx.Menu()                    ######MENUBAR
        fileMenu = wx.Menu()
        helpItem = helpMenu.Append(wx.ID_ANY, 'Help',"Help")
        fileItem = fileMenu.Append(wx.ID_EXIT, 'Quit', 'Quit application')

        menubar.Append(fileMenu, '&File')
        menubar.Append(helpMenu, '&Help')





        self.returnsReport = wx.FileDialog(panel, 'Open Returns Report', "", "", "Excel Files (*.xlsx)|*.xlsx", wx.FD_OPEN | wx.FD_FILE_MUST_EXIST)
        self.returnsButton = wx.Button(panel, pos = (430,25), id=wx.ID_ANY, label="Returns Report")
        self.returnsButton.myname = "Returns"
        self.returnsButton.Bind(wx.EVT_BUTTON, self.findReturns)

        self.ser02Report = wx.FileDialog(panel, 'Open SER02', "", "", "Excel Files (*.xlsx)|*.xlsx", wx.FD_OPEN | wx.FD_FILE_MUST_EXIST)
        self.ser02Button = wx.Button(panel, pos = (430,75), id=wx.ID_ANY, label="SER02 Report")
        self.ser02Button.myname = "SER02"
        self.ser02Button.Bind(wx.EVT_BUTTON, self.findReturns)

        self.objkReport = wx.FileDialog(panel, 'Open OBJK', "", "", "Excel Files (*.xlsx)|*.xlsx", wx.FD_OPEN | wx.FD_FILE_MUST_EXIST)
        self.objkButton = wx.Button(panel, pos = (430,125), id=wx.ID_ANY, label="OBJK Report")
        self.objkButton.myname = "OBJK"
        self.objkButton.Bind(wx.EVT_BUTTON, self.findReturns)

        self.runButton = wx.Button(panel, pos = (500,175), id=wx.ID_ANY, label="Run Report")
        self.runButton.myname = "Run"
        self.runButton.Bind(wx.EVT_BUTTON, self.runReport)


        buttons = [self.returnsButton, self.ser02Button, self.objkButton]
        self.returnsFile = wx.TextCtrl(panel, pos = (60,25), size = (350,-1))
        self.ser02File = wx.TextCtrl(panel, pos = (60,75), size = (350,-1))
        self.objkFile = wx.TextCtrl(panel, pos = (60,125), size = (350,-1))

        self.Bind(wx.EVT_CLOSE, self.OnQuit)



        #box.Add(self.lst,0,wx.EXPAND)
        panel.SetSizer(box) 
        panel.Fit()


    def findReturns(self, event):


        button = event.GetEventObject().myname
        if button == 'Returns':
            self.returnsReport.ShowModal()
            self.returnsFile.SetValue(self.returnsReport.GetPath())

            self.returnsReport.Destroy()
        elif button == 'SER02':
            self.ser02Report.ShowModal()
            self.ser02File.SetValue(self.ser02Report.GetPath())
            self.ser02Report.Destroy()
        else:
            self.objkReport.ShowModal()
            self.objkFile.SetValue(self.objkReport.GetPath())
            self.objkReport.Destroy()   

好的,你调用
self.returnsReport.Destroy()
,它不应该在那之后被销毁吗?另外,最好推迟创建文件对话框,直到你真正需要显示它们。好的,你调用
self.returnsReport.Destroy()
,它不应该在那之后被销毁吗?还有,最好推迟创建文件对话框,直到您真正需要显示它们。