Création de cadres enfants du cadre principal en wxPython

j'essaie de créer un nouveau cadre en wxPython qui est un enfant du cadre principal de sorte que lorsque le cadre principal est fermé, le cadre enfant sera également fermé.

Voici un exemple simplifié le problème que je rencontre:

#! /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 positionne le cadre parent de L'image à None (sur la ligne 48) alors le cadre About est créé et affiché avec succès mais il reste ouvert lorsque le cadre principal est fermé.

c'Est l'approche que je devrait prendre pour création d'images de la trame principale ou devrais-je faire différemment, par exemple. utiliser l'événement onClose du cadre principal pour fermer les cadres enfants (cela sonne très "hackish").

si j'adopte la bonne approche, pourquoi ne fonctionne-t-elle pas?

11
demandé sur Peter Horne 2009-07-26 22:08:57

1 réponses

class AboutFrame(wx.Frame):

    title = "About this program"

    def __init__(self):
        wx.Frame.__init__(self, wx.GetApp().TopWindow, title=self.title)
9
répondu Toni Ruža 2009-07-26 18:37:56