创建于wxPython的主框架的子帧(Creating child frames of main f

2019-07-30 20:21发布

我试图创建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()

如果我设置AboutFrame的父框架无(在48行)则成功地创建了关于框架和显示,而是将主框架关闭其打开。

这是我应该考虑创建主框架的子框架或我应该做不同的是,如方法。 使用主框架的onClose事件会关闭任何子帧(这种方法听起来很“hackish的”)。

如果我采取了正确的方法,它为什么不工作?

Answer 1:

class AboutFrame(wx.Frame):

    title = "About this program"

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


文章来源: Creating child frames of main frame in wxPython