2009-07-26 6 views
11

Ich versuche, einen neuen Rahmen in WxPython, der ein Kind des Hauptrahmens ist, so dass der untergeordnete Rahmen geschlossen wird, wenn der Hauptrahmen geschlossen wird.Erstellen von untergeordneten Rahmen des Hauptrahmens in WxPython

Hier ist ein vereinfachtes Beispiel für das Problem, dass ich habe:

#! /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() 

Wenn ich AboutFrame übergeordneten Rahmen zu None (auf der Leitung 48), dann der Über-Rahmen wird erfolgreich erstellt und angezeigt gesetzt, aber es bleibt offen wenn der Hauptrahmen geschlossen ist.

Ist das der Ansatz, den ich nehmen sollte, um Kind-Frames des Hauptrahmens zu erstellen, oder sollte ich es anders machen, z. Verwenden Sie das onClose-Ereignis des Hauptrahmens, um alle untergeordneten Frames zu schließen (dies klingt sehr "hackisch").

Wenn ich den richtigen Ansatz nehme, warum funktioniert es nicht?

Antwort

9
class AboutFrame(wx.Frame): 

    title = "About this program" 

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