是否可以将wx.auiManager窗格停靠在另一个窗格的顶部/底部?

时间:2010-03-03 22:49:29

标签: python wxpython dock

使用此代码:

import wx
import wx.aui

class MyFrame(wx.Frame):

    def __init__(self, parent, id=-1, title='wx.aui Test',
                 pos=wx.DefaultPosition, size=(800, 600),
                 style=wx.DEFAULT_FRAME_STYLE):
        wx.Frame.__init__(self, parent, id, title, pos, size, style)

        self._mgr = wx.aui.AuiManager(self)

        # create several text controls
        text1 = wx.TextCtrl(self, -1, 'Pane 1 - sample text',
                            wx.DefaultPosition, wx.Size(200,150),
                            wx.NO_BORDER | wx.TE_MULTILINE)

        text2 = wx.TextCtrl(self, -1, 'Pane 2 - sample text',
                            wx.DefaultPosition, wx.Size(200,150),
                            wx.NO_BORDER | wx.TE_MULTILINE)


        info = wx.aui.AuiPaneInfo()
        info.CaptionVisible(True)
        info.BottomDockable(False)
        info.LeftDockable(False)
        info.RightDockable(False)
        info.PaneBorder(False)
        info.Top()
        info.Row(1)

        info2 = wx.aui.AuiPaneInfo()
        info2.CaptionVisible(True)
        info2.BottomDockable(False)
        info2.LeftDockable(False)
        info2.RightDockable(False)
        info2.Top()
        info2.Row(2)

        self._mgr.AddPane(text1, info, 'Pane Number One')
        self._mgr.AddPane(text2, info2, 'Pane Number Two')

        self._mgr.Update()

        self.Bind(wx.EVT_CLOSE, self.OnClose)


    def OnClose(self, event):
        self._mgr.UnInit()
        self.Destroy()


app = wx.App()
frame = MyFrame(None)
frame.Show()
app.MainLoop()

我创建的两个窗格停靠在Top中。 info.Row(1)和info2.Row(2)将两个窗格依次放在一起:

_TOP_
Pane1
Pane2

现在,如果我继续使用Pane2,它将停靠在Top中,并且会出现这种情况:

_TOP_
Pane1|Pane2

我想: 1.避免这种情况(每行只有一个窗格!) 2.如果我移动,将窗格停靠在另一个窗格的底部/顶部

这可能吗?

1 个答案:

答案 0 :(得分:1)

也许AuiNotebook wxPython样本适合你?

import wx
import wx.aui

########################################################################
class TabPanel(wx.Panel):
    """
    This will be the first notebook tab
    """
    #----------------------------------------------------------------------
    def __init__(self, parent):
        """"""

        wx.Panel.__init__(self, parent=parent, id=wx.ID_ANY)

        sizer = wx.BoxSizer(wx.VERTICAL)
        txtOne = wx.TextCtrl(self, wx.ID_ANY, "")
        txtTwo = wx.TextCtrl(self, wx.ID_ANY, "")

        sizer = wx.BoxSizer(wx.VERTICAL)
        sizer.Add(txtOne, 0, wx.ALL, 5)
        sizer.Add(txtTwo, 0, wx.ALL, 5)

        self.SetSizer(sizer)

class DemoPanel(wx.Panel):
    """
    This will be the first notebook tab
    """
    #----------------------------------------------------------------------
    def __init__(self, parent):
        """"""
        wx.Panel.__init__(self, parent=parent, id=wx.ID_ANY)

        # create the AuiNotebook instance
        nb = wx.aui.AuiNotebook(self)

        # add some pages to the notebook
        pages = [(TabPanel(nb), "Tab 1"),
                 (TabPanel(nb), "Tab 2"),
                 (TabPanel(nb), "Tab 3")]
        for page, label in pages:
            nb.AddPage(page, label)

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

########################################################################
class DemoFrame(wx.Frame):
    """
    Frame that holds all other widgets
    """

    #----------------------------------------------------------------------
    def __init__(self):
        """Constructor"""
        wx.Frame.__init__(self, None, wx.ID_ANY,
                          "AUI-Notebook Tutorial",
                          size=(600,400))
        panel = DemoPanel(self)
        self.Show()

#----------------------------------------------------------------------
if __name__ == "__main__":
    app = wx.PySimpleApp()
    frame = DemoFrame()
    app.MainLoop()