2012-07-16 3 views
2

새 하위 프레임을 만들거나 이미 만든 하위 프레임을 보여주는 버튼이 있습니다. 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.

답변