为MDIChildFrame创建Notebook选项卡

时间:2013-05-01 04:39:52

标签: python wxpython

我希望能够使用wxflatnotebook或类似方法在MDIChildFrame之间进行选项卡。我已经包含了我的代码,还有一个我正在寻找的例子的图像。我试图复制的标签是(GPBUSD)& (EURUSD)。到目前为止,我没有任何运气,所以任何信息将不胜感激。

import wx
import wx.lib.agw.aui as aui

class MDIFrame(wx.MDIParentFrame):
    def __init__(self):
        wx.MDIParentFrame.__init__(self, None, -1, "MDI Parent", size =(1350, 720))
        menu = wx.Menu()
        menu.Append(5000, "&New Window")
        menu.Append(5001, "&Exit")
        menubar = wx.MenuBar()
        menubar.Append(menu, "&File")
        self.SetMenuBar(menubar)
        self.Bind(wx.EVT_MENU, self.OnNewWindow, id=5000)
        self.Bind(wx.EVT_MENU, self.OnExit, id=5001)
        self.mgr = aui.AuiManager(self, aui.AUI_MGR_DEFAULT
                                       |aui.AUI_MGR_TRANSPARENT_DRAG
                                       |aui.AUI_MGR_ALLOW_ACTIVE_PANE                                     
                                       |aui.AUI_MGR_TRANSPARENT_HINT)                      
        self.inputPanel = wx.Panel(self, -1)
        self.BuildPain()

    def BuildPain(self):                             
        self.mgr.AddPane(self.GetClientWindow(),
                         aui.AuiPaneInfo().Name("book").Caption("Notebook").
                         CenterPane().CaptionVisible(True).Dockable(True).Floatable(False).
                         BestSize((300,300)).CloseButton(False).MaximizeButton(True)
                         )    
        self.mgr.AddPane(self.inputPanel,
                        aui.AuiPaneInfo().Name("input").Caption("Input panel").
                         CaptionVisible(True).Left().Dockable(True).Floatable(True).
                         BestSize((300,300)).CloseButton(False).MaximizeButton(True)
                         )
        self.mgr.Update()

    def OnExit(self, evt):
        self.Close(True)

    def OnNewWindow(self, evt):
        win = wx.MDIChildFrame(self, -1, "Child Window")
        win.Show(True)

if __name__ == "__main__":
    app = wx.App(0)
    frame = MDIFrame()
    frame.CenterOnScreen()
    frame.Show()
    app.MainLoop()

Example Image http://imageshack.us/a/img534/280/mdip.png

1 个答案:

答案 0 :(得分:1)

也许你可以尝试AuiMDIParentFrame,AuiMDIChildFrame是ParentFrame中的标签。这是代码:

#!/usr/bin/env python
#-*- encoding: gb18030 -*-
import wx
import wx.aui

#----------------------------------------------------------------------

class ParentFrame(wx.aui.AuiMDIParentFrame):
    def __init__(self,parent):
        wx.aui.AuiMDIParentFrame.__init__(self, parent,-1,
                                          title="AuiMDIParentFrame",
                                          size=(640,480),
                                          style=wx.DEFAULT_FRAME_STYLE)
        self.count = 0
        # tell FrameManager to manage this frame

        #creat menu
        mb = self.MakeMenuBar()
        self.SetMenuBar(mb)

        #creat statubar
        self.statusbar = self.CreateStatusBar(2, wx.ST_SIZEGRIP)
        self.statusbar.SetStatusWidths([-2, -3])
        self.statusbar.SetStatusText("Ready", 0)
        self.statusbar.SetStatusText("Welcome To wxPython!", 1)

        #create toolbar


    def MakeMenuBar(self):
        mb = wx.MenuBar()
        menu = wx.Menu()
        item = menu.Append(-1, "New child window\tCtrl-N")
        self.Bind(wx.EVT_MENU, self.OnNewChild, item)
        item = menu.Append(-1, "Close parent")
        self.Bind(wx.EVT_MENU, self.OnDoClose, item)
        mb.Append(menu, "&File")
        return mb

    def OnNewChild(self, evt):
        self.count += 1
        try:
            child = ChildFrame(self, self.count)
        except Exception,data:
            print data
        child.Show()

    def OnDoClose(self, evt):
        self.Close()


#----------------------------------------------------------------------

class ChildFrame(wx.aui.AuiMDIChildFrame):
    def __init__(self, parent, count):
        wx.aui.AuiMDIChildFrame.__init__(self, parent, -1,
                                         title="Child: %d" % count)
        mb = parent.MakeMenuBar()
        menu = wx.Menu()
        item = menu.Append(-1, "This is child %d's menu" % count)
        mb.Append(menu, "&Child")
        self.SetMenuBar(mb)

        p = wx.Panel(self)
        wx.StaticText(p, -1, "This is child %d" % count, (10,10))
        p.SetBackgroundColour('light blue')

        sizer = wx.BoxSizer()
        sizer.Add(p, 1, wx.EXPAND)
        self.SetSizer(sizer)

        wx.CallAfter(self.Layout)


if __name__ == '__main__':
    App = wx.App()
    frame = ParentFrame(None)
    App.SetTopWindow(frame)
    frame.Show()
    App.MainLoop()