새 하위 프레임을 만들거나 이미 만든 하위 프레임을 보여주는 버튼이 있습니다. Show() 만 사용하려고 할 때 문제가 발생했습니다. 사용자가 자식 프레임을 종료 한 경우 더 이상 존재하지 않는 프레임에 액세스했기 때문에 오류가 발생합니다. 현재 try/except를 사용하여이 문제를 해결하고 있지만 더 좋은 방법이 있습니까? 아마도 이것을 처리하는 Raise()와 같은 함수이거나 프레임이 있는지 여부를 확인하는 방법일까요?삭제 된 하위 프레임 표시 (wxPython)
코드 :
#!/usr/bin/env python
import wx
class LogWindow(wx.Frame):
def __init__(self, parent):
wx.Frame.__init__(self, parent)
self.logger = wx.TextCtrl(self, style=wx.TE_MULTILINE | wx.TE_READONLY)
def Print(self):
self.Raise()
self.logger.AppendText("Hello, world\n")
class MainWindow(wx.Frame):
def __init__(self, parent, id, title):
wx.Frame.__init__(self, parent, id, title)
panel=wx.Panel(self)
label = wx.StaticText(panel, -1, "Log this message:", pos=(10,10))
goButton = wx.Button(panel, label="Log", pos=(10,50))
self.Bind(wx.EVT_BUTTON, self.OnClick, goButton)
self.logWin = LogWindow(self)
#++++++++++++++++++++++++++
def OnClick(self, event):
try:
self.logWin.Show()
except:
self.logWin = LogWindow(self)
self.logWin.Show()
self.logWin.Print()
#++++++++++++++++++++++++++
class MyApp(wx.App):
def OnInit(self):
frame = MainWindow(None, -1, "MyApp")
frame.Show(True)
self.SetTopWindow(frame)
return True
#************************************************
if __name__ == "__main__":
app = MyApp(0)
app.MainLoop()
나는 시도하지 않고 self.logWin.Show()
에 나타나는 오류/제외하고 당신은 거기 아직도 있는지 확인하는 isinstance를 사용할 수
wx._core.PyDeadObjectError: The C++ part of the LogWindow object has been deleted, attribute access no longer allowed.
감사합니다 많이! 이 스레드는 매우 유익합니다. – Evelyn