2009-07-26 16 views
11

Próbuję utworzyć nową ramkę w wxPython, która jest elementem potomnym ramki głównej, tak aby po zamknięciu ramki głównej ramka podrzędna również była zamknięta.Tworzenie ramek podrzędnych ramki głównej w wxPythonie

Oto uproszczony przykład problemu, które mam:

#! /usr/bin/env python 

import wx 

class App(wx.App): 

    def OnInit(self): 
     frame = MainFrame() 
     frame.Show() 
     self.SetTopWindow(frame) 
     return True 

class MainFrame(wx.Frame): 

    title = "Main Frame" 

    def __init__(self): 
     wx.Frame.__init__(self, None, 1, self.title) #id = 5 

     menuFile = wx.Menu() 

     menuAbout = wx.Menu() 
     menuAbout.Append(2, "&About...", "About this program") 

     menuBar = wx.MenuBar() 
     menuBar.Append(menuAbout, "&Help") 
     self.SetMenuBar(menuBar) 

     self.CreateStatusBar() 

     self.Bind(wx.EVT_MENU, self.OnAbout, id=2) 

    def OnQuit(self, event): 
     self.Close() 

    def OnAbout(self, event): 
     AboutFrame().Show() 

class AboutFrame(wx.Frame): 

    title = "About this program" 

    def __init__(self): 
     wx.Frame.__init__(self, 1, -1, self.title) #trying to set parent=1 (id of MainFrame()) 


if __name__ == '__main__': 
    app = App(False) 
    app.MainLoop() 

Jeżeli ustawić AboutFrame rodzic ramkę na None (on line 48), a następnie O Rama pomyślnie utworzony i wyświetlony ale pozostaje otwarty gdy główna rama jest zamknięta.

Czy to podejście, które powinienem podjąć, aby stworzyć ramki dla dziecka w ramce głównej, czy też powinienem robić to inaczej, np. użycie zdarzenia onClose ramki głównej w celu zamknięcia ramek potomnych (w ten sposób brzmi to bardzo "hack").

Jeśli podejmuję właściwe podejście, dlaczego ono nie działa?

Odpowiedz

9
class AboutFrame(wx.Frame): 

    title = "About this program" 

    def __init__(self): 
     wx.Frame.__init__(self, wx.GetApp().TopWindow, title=self.title)