python 在wxPython中创建主框架的子框架
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/1185156/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Creating child frames of main frame in wxPython
提问by Peter Horne
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 行),则 About 框架成功创建并显示,但在主框架关闭时它保持打开状态。
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?
如果我采取了正确的方法,为什么它不起作用?
采纳答案by Toni Ru?a
class AboutFrame(wx.Frame):
title = "About this program"
def __init__(self):
wx.Frame.__init__(self, wx.GetApp().TopWindow, title=self.title)