2009-07-26 6 views
11

J'essaye de créer un nouveau cadre dans wxPython qui est un enfant de la trame principale de sorte que lorsque le cadre principal est fermé, le cadre enfant sera également fermé.Création de cadres enfants du cadre principal dans wxPython

Voici un exemple simplifié du problème que j'ai:

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

Si je mets le cadre parent de AboutFrame None (ligne 48), le cadre A propos est été créé et est affiché, mais il reste ouvert lorsque le cadre principal est fermé

Est-ce l'approche que je devrais prendre pour créer des cadres enfants du cadre principal ou devrais-je le faire différemment, par exemple. en utilisant l'événement onClose de l'image principale pour fermer les cadres enfants (de cette façon, cela semble très «hackish»).

Si je prends la bonne approche, pourquoi cela ne fonctionne-t-il pas?

Répondre

9
class AboutFrame(wx.Frame): 

    title = "About this program" 

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