Подтвердить что ты не робот

Создание дочерних кадров основного фрейма в wxPython

Я пытаюсь создать новый фрейм в wxPython, который является дочерним элементом основного фрейма, так что когда основной кадр будет закрыт, дочерний кадр также будет закрыт.

Вот упрощенный пример проблемы, с которой я сталкиваюсь:

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

Если я установил родительский фрейм ОФРаМ в "Нет" (в строке 48), то рамка "О программе" будет успешно создана и отображена, но она останется открытой, когда основной кадр закрыт.

Это тот подход, который я должен использовать для создания дочерних кадров основного фрейма, или я должен делать это по-другому, например. используя событие onClose основного кадра для закрытия любых дочерних кадров (этот способ звучит очень "хакерски" ).

Если я использую правильный подход, почему он не работает?

4b9b3361

Ответ 1

class AboutFrame(wx.Frame):

    title = "About this program"

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