在wxPython中创建主框架的子框架

时间:2020-12-18 07:11:13

I am trying create a new frame in wxPython that is a child of the main frame so that when the main frame is closed, the child frame will also be closed.

我正在尝试在wxPython中创建一个新框架,它是主框架的子框架,这样当主框架关闭时,子框架也将关闭。

Here is a simplified example of the problem that I am having:

以下是我遇到的问题的简化示例:

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

If I set AboutFrame's parent frame to None (on line 48) then the About frame is succesfully created and displayed but it stays open when the main frame is closed.

如果我将AboutFrame的父框架设置为None(在第48行),则会成功创建并显示“关于”框架,但在主框架关闭时它将保持打开状态。

Is this the approach that I should be taking to create child frames of the main frame or should I be doing it differently, eg. using the onClose event of the main frame to close any child frames (this way sounds very 'hackish').

这是我应该采取的方法来创建主框架的子框架,或者我应该采取不同的方式,例如。使用主框架的onClose事件来关闭任何子框架(这种方式听起来非常'hackish')。

If I am taking the correct approach, why is it not working?

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

1 个解决方案

#1


class AboutFrame(wx.Frame):

    title = "About this program"

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

#1


class AboutFrame(wx.Frame):

    title = "About this program"

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

相关文章