2012-07-16 47 views
2

我有一个按钮,可以创建一个新的子框架或显示已创建的框架。当我试图单独使用Show()时遇到了问题 - 如果用户已退出子框架,则会因为访问不再存在的框架而出现错误。我目前正在使用try /除了解决这个问题,但有没有更好的方法?也许一个类似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()收到没有尝试错误/除非是

wx._core.PyDeadObjectError: The C++ part of the LogWindow object has been deleted, attribute access no longer allowed.

回答