2014-02-19 2 views
1

내 응용 프로그램은 두 개의 MDIChildFrame을 열려고하는 하나의 MDIParentFrame으로 구성됩니다. MDIChildFrame을 열 때마다 내 MDIParentFrame이 메뉴 막대에 MDIChildFrame에서 내 보낸 메뉴를 표시하고 자신의 메뉴를 복구하지 않기 때문에 "시도"라고 말합니다.wxPython MDIChildFrame 메뉴

MDIPhrentFrame이 해당 메뉴를 통해 두 번째 MDIChildFrame을로드하기 위해 다시 자체 메뉴를 표시하도록 내 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() 

고마워, 안부, 하비에르 :

여기 내 코드입니다.

+0

작업 코드와 함께 명확한 질문을 게시 해 주셔서 감사합니다. 나는 그게 관련이 있는지는 모르겠지만 - 아마도 그렇지는 않을 것이다 - 그러나 하드 코딩 된 nimbers wxIDs를 할당하는 것은 당황스럽게 보인다. wx.NewId()에서 가져와야합니다. – GreenAsJade

답변

0

메뉴 "창"에 새 메뉴 항목 "아들 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() 
+0

부모 메뉴에 하위 메뉴 항목을 추가하려고하지 않는다고 생각합니다. 그는 아이가 선택 해제되었을 때 부모 메뉴가 다시 나타나게하는 방법을 원합니다. 그러나 나는 이것이 "효과가 없을 것"이라고 생각한다. 이는 MDIParent 내에서 자식 중 하나가 항상 선택되기 때문입니다. 자녀를 선택하지 않는 경우 (또는 방법)가 없습니다. – GreenAsJade

+0

@GreenAsJade 원래 메뉴는 childframe init.You가 내 코드로 시도 할 수있는 self.SetMenuBar (메뉴 바)와 함께 새로 만들어진 메뉴 막대로 대체 되었기 때문에 사라졌습니다. –

+1

고마워요. 둘 다 옳았습니다. 내가 정말로 필요한 것은 GreenAsJade가 마지막 코멘트에서 말한 것입니다. 그러나 Jerry_Y가 말했듯이, "self.SetMenuBar (menubar)"를 사용하기 때문에 메뉴 바가 변경되었습니다. 이러한 메뉴 모음을 제어하기 위해 일부 이벤트를 관리하려고합니다. – futpilari