wxPython MDIChildFrame菜单

wxPython MDIChildFrame菜单,wxpython,mdichild,mdiparent,Wxpython,Mdichild,Mdiparent,我的应用程序由一个MDIParentFrame组成,它试图打开两个MDIChildFrame。 我之所以说“try”,是因为每次打开第一个MDIChildFrame时,我的MDIParentFrame都会在菜单栏中显示MDIChildFrame导出的菜单,并且永远不会恢复自己的菜单 我不知道如何停用MDIChildFrame,以便MDIPArentFrame再次显示其自己的菜单,以便通过其菜单加载第二个MDIChildFrame 这是我的密码: import wx class MDIFrame

我的应用程序由一个MDIParentFrame组成,它试图打开两个MDIChildFrame。 我之所以说“try”,是因为每次打开第一个MDIChildFrame时,我的MDIParentFrame都会在菜单栏中显示MDIChildFrame导出的菜单,并且永远不会恢复自己的菜单

我不知道如何停用MDIChildFrame,以便MDIPArentFrame再次显示其自己的菜单,以便通过其菜单加载第二个MDIChildFrame

这是我的密码:

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父级似乎没有“未选择子级”状态。