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

12 投票
1 回答
12531 浏览
提问于 2025-04-15 13:10

我正在尝试在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的父窗口设置为None(在第48行),那么About窗口就能成功创建并显示,但当主窗口关闭时,它仍然会保持打开状态。

我这样创建主窗口的子窗口是否正确,还是应该用其他方法,比如在主窗口关闭时触发一个事件来关闭所有子窗口(这种方法听起来有点“黑科技”)。

如果我这样做是对的,为什么它却不奏效呢?

1 个回答

10

在编程中,有时候我们会遇到一些问题,特别是在使用某些工具或库的时候。这些问题可能会让我们感到困惑,不知道该怎么解决。比如,有人可能在使用某个特定的功能时,发现它没有按照预期工作,或者出现了错误信息。这种情况下,通常我们需要去查找相关的资料,看看有没有人遇到过类似的问题,或者有没有解决方案。

在这个过程中,提问也是一个很重要的环节。我们可以在一些技术论坛,比如StackOverflow,去询问其他开发者的意见和建议。提问时,尽量描述清楚你遇到的问题,包括你使用的工具、代码示例,以及你尝试过的解决方法。这样其他人才能更好地理解你的问题,并给出有效的帮助。

总之,遇到问题时不要慌张,先冷静下来,查找资料,必要时向社区求助,通常都会找到解决办法的。

class AboutFrame(wx.Frame):

    title = "About this program"

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

撰写回答