python — RUNTIME Ошибка при изменении файлов в виджете wx.FileDialog

У меня есть графический интерфейс, который просит пользователя открыть 3 файла xlsx из 3 окон wx.FileDialog. Программа работает нормально, однако я получаю RuntimeError: wrapped C/C++ object of type FileDialog has been deleted если я попытаюсь изменить файл. Например, в файле returnReport fileDialog, если я открою неправильный файл и перейду к нему, то получу ошибку. Ниже приведен фрагмент кода, любая помощь с этой ошибкой была бы полезна.

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

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]