wxPython MDIChildFrame菜单
我的应用程序由一个MDIParentFrame组成,它试图打开两个MDIChildFrame。 我之所以说“try”,是因为每次打开第一个MDIChildFrame时,我的MDIParentFrame都会在菜单栏中显示MDIChildFrame导出的菜单,并且永远不会恢复自己的菜单 我不知道如何停用MDIChildFrame,以便MDIPArentFrame再次显示其自己的菜单,以便通过其菜单加载第二个MDIChildFrame 这是我的密码:wxPython MDIChildFrame菜单,wxpython,mdichild,mdiparent,Wxpython,Mdichild,Mdiparent,我的应用程序由一个MDIParentFrame组成,它试图打开两个MDIChildFrame。 我之所以说“try”,是因为每次打开第一个MDIChildFrame时,我的MDIParentFrame都会在菜单栏中显示MDIChildFrame导出的菜单,并且永远不会恢复自己的菜单 我不知道如何停用MDIChildFrame,以便MDIPArentFrame再次显示其自己的菜单,以便通过其菜单加载第二个MDIChildFrame 这是我的密码: import wx class MDIFrame
import wx
class MDIFrame(wx.MDIParentFrame):
def __init__(self):
wx.MDIParentFrame.__init__(self, None, -1, "MDI Parent",size=(600,400))
menu = wx.Menu()
menu.Append(5000, "&New Window 1")
menu.Append(5002, "&New Window 2")
menu.Append(5001, "E&xit")
menubar = wx.MenuBar()
menubar.Append(menu, "&File")
self.SetMenuBar(menubar)
self.Bind(wx.EVT_MENU, self.OnNewWindow1, id=5000)
self.Bind(wx.EVT_MENU, self.OnExit, id=5001)
self.Bind(wx.EVT_MENU, self.OnNewWindow2, id=5002)
def OnExit(self, evt):
self.Close(True)
def OnNewWindow1(self, evt):
#win = wx.MDIChildFrame(self, -1, "Child Window")
win = MDIHijo1(self)
win.Show(True)
def OnNewWindow2(self, evt):
#win = wx.MDIChildFrame(self, -1, "Child Window")
win = MDIHijo2(self)
win.Show(True)
class MDIHijo1(wx.MDIChildFrame):
def __init__(self,parent):
wx.MDIChildFrame.__init__(self,parent,title='Ventana Hijo 1')
menu = wx.Menu()
menu.Append(5500, "&Son 1")
menu.Append(5501, "&Son 1")
menubar = wx.MenuBar()
menubar.Append(menu, "&File")
self.SetMenuBar(menubar)
class MDIHijo2(wx.MDIChildFrame):
def __init__(self,parent):
wx.MDIChildFrame.__init__(self,parent,title='Ventana Hijo 2')
menu = wx.Menu()
menu.Append(5500, "&Son 2")
menu.Append(5501, "&Son 2")
menubar = wx.MenuBar()
menubar.Append(menu, "&File")
self.SetMenuBar(menubar)
app = wx.PySimpleApp()
frame = MDIFrame()
frame.Show()
app.MainLoop()
非常感谢你的帮助,
顺致敬意,
Javier.是否要将新菜单项“子1”/“子2”添加到菜单“窗口”中 您可以使用menu=parent.GetWindowMenu()并将菜单项附加到它
import wx
class MDIFrame(wx.MDIParentFrame):
def __init__(self):
wx.MDIParentFrame.__init__(self, None, -1, "MDI Parent",size=(600,400))
menu = wx.Menu()
menu.Append(5000, "&New Window 1")
menu.Append(5002, "&New Window 2")
menu.Append(5001, "E&xit")
menubar = wx.MenuBar()
menubar.Append(menu, "&File")
self.SetMenuBar(menubar)
self.Bind(wx.EVT_MENU, self.OnNewWindow1, id=5000)
self.Bind(wx.EVT_MENU, self.OnExit, id=5001)
self.Bind(wx.EVT_MENU, self.OnNewWindow2, id=5002)
def OnExit(self, evt):
self.Close(True)
def OnNewWindow1(self, evt):
#win = wx.MDIChildFrame(self, -1, "Child Window")
win = MDIHijo1(self)
win.Show(True)
def OnNewWindow2(self, evt):
#win = wx.MDIChildFrame(self, -1, "Child Window")
win = MDIHijo2(self)
win.Show(True)
class MDIHijo1(wx.MDIChildFrame):
def __init__(self,parent):
wx.MDIChildFrame.__init__(self,parent,title='Ventana Hijo 1')
menu = parent.GetWindowMenu()
menu.Append(5500, "&Son 1")
menu.Append(5501, "&Son 1")
# menubar = wx.MenuBar()
# menubar.Append(menu, "&File")
# self.SetMenuBar(menubar)
class MDIHijo2(wx.MDIChildFrame):
def __init__(self,parent):
wx.MDIChildFrame.__init__(self,parent,title='Ventana Hijo 2')
menu = parent.GetWindowMenu()
menu.Append(5500, "&Son 2")
menu.Append(5501, "&Son 2")
# menubar = wx.MenuBar()
# menubar.Append(menu, "&File")
# self.SetMenuBar(menubar)
app = wx.PySimpleApp()
frame = MDIFrame()
frame.Show()
app.MainLoop()
感谢您发布一个清晰的问题,工作代码-干得好。我不知道这是否有关联——也许没有——但分配硬编码的雨伞WXID似乎是不可靠的。您应该从wx.NewId()获得这些。我认为他不想将子菜单项附加到父菜单。他想要一种在取消选择子菜单时使父菜单返回的方法。然而,我认为这“行不通”。这是因为在MDI父对象中,始终选择一个子对象。没有一种情况(或方法)可以不选择子项。@GreenAsJade原始菜单消失了,因为它在子帧初始化时被新创建的带有self.SetMenuBar(menubar)的菜单栏替换。您可以试用我的代码。谢谢,你们两个都是对的。我真正需要的是GreenAsJade在最后一条评论中所说的内容,但正如Jerry_Y所说,菜单栏已经更改,因为我使用了“self.SetMenuBar(菜单栏)”。我将尝试管理一些事件以控制这些菜单栏。我认为根本的困难在于MDI父级似乎没有“未选择子级”状态。