python - 多个面板

标签 python wxpython

我的程序有两个问题。下面的代码在应该生成 3 个面板时生成了两个面板。它生成 panel1panel2 没问题,但是 panel3 应该在 的右边>panel2 无处可见。 Panel1panel2 是垂直分割的 我正在尝试对 panel2panel3

做同样的事情

我的第二个问题是如何在 panel1 下面生成另一个面板而不破坏 panel1panel2 之间的拆分器,然后在它们之间创建一个拆分器panel1 和它下面新创建的面板?

import wx


class Panels(wx.Frame):
    def __init__(self, parent, id, title):
        wx.Frame.__init__(self, parent, id, title)

        hbox = wx.BoxSizer(wx.HORIZONTAL)
        splitter = wx.SplitterWindow(self, -1)

        vbox1 = wx.BoxSizer(wx.VERTICAL)
        panel1 = wx.Panel(splitter, -1)
        panel12 = wx.Panel(panel1, -1, style=wx.BORDER_SUNKEN)
        st1 = wx.StaticText(panel12, -1, 'Panel 1', (5, 5))
        vbox1.Add(panel12, 1, wx.EXPAND)
        panel1.SetSizer(vbox1)

        vbox2 = wx.BoxSizer(wx.VERTICAL)
        panel2 = wx.Panel(splitter, -1)
        panel22 = wx.Panel(panel2, -1, style=wx.BORDER_RAISED)
        st2 = wx.StaticText(panel22, -1, 'Panel 2', (5, 5))
        vbox2.Add(panel22, 1, wx.EXPAND)
        panel2.SetSizer(vbox2)

        vbox3 = wx.BoxSizer(wx.VERTICAL)
        panel3 = wx.Panel(splitter, -1)
        panel32 = wx.Panel(panel3, -1, style=wx.BORDER_RAISED)
        st3 = wx.StaticText(panel32, -1, 'Panel 3', (5, 5))
        vbox3.Add(panel32, 1, wx.EXPAND)
        panel3.SetSizer(vbox3)

        hbox.Add(splitter, 1, wx.EXPAND | wx.TOP | wx.BOTTOM, 5)
        self.SetSizer(hbox)
        self.CreateStatusBar()
        splitter.SplitVertically(panel1, panel3)
        splitter.SplitVertically(panel2, panel3)
        self.Centre()
        self.Show(True)


    def ExitApp(self, event):
        self.Close()


app = wx.App()
Panels(None, -1, 'Panels')
app.MainLoop()

最佳答案

您有几个选择。您可以嵌套您的 SplitterWindows,这有点令人困惑,但很有效。或者您可以使用 MultiSplitterWindow 小部件。

对于第一个,我会做这样的事情:

  1. 创建主分离器和子分离器
  2. 在子拆分器中,但前两个面板
  3. 将子分离器和第 3 个面板放在主分离器中

或其一些变体。

编辑:这是一个例子:

import wx

########################################################################
class RandomPanel(wx.Panel):
    """"""

    #----------------------------------------------------------------------
    def __init__(self, parent, color):
        """Constructor"""
        wx.Panel.__init__(self, parent)
        self.SetBackgroundColour(color)



########################################################################
class MainPanel(wx.Panel):
    """"""

    #----------------------------------------------------------------------
    def __init__(self, parent):
        """Constructor"""
        wx.Panel.__init__(self, parent)

        topSplitter = wx.SplitterWindow(self)
        hSplitter = wx.SplitterWindow(topSplitter)

        panelOne = RandomPanel(hSplitter, "blue")
        panelTwo = RandomPanel(hSplitter, "red")
        hSplitter.SplitVertically(panelOne, panelTwo)
        hSplitter.SetSashGravity(0.5)

        panelThree = RandomPanel(topSplitter, "green")
        topSplitter.SplitHorizontally(hSplitter, panelThree)
        topSplitter.SetSashGravity(0.5)

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

########################################################################
class MainFrame(wx.Frame):
    """"""

    #----------------------------------------------------------------------
    def __init__(self):
        """Constructor"""
        wx.Frame.__init__(self, None, title="Nested Splitters",
                          size=(800,600))
        panel = MainPanel(self)
        self.Show()

#----------------------------------------------------------------------
if __name__ == "__main__":
    app = wx.App(False)
    frame = MainFrame()
    app.MainLoop()

还可以看看 wx.SashLayoutWindow: http://www.wxpython.org/docs/api/wx.SashLayoutWindow-class.html

关于python - 多个面板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8771150/

相关文章:

python - 如何解码编码的种子数据

python如何在不使用随机库的情况下根据给定输入生成随机数?

python - 从 wxPython WebView 得到奇怪的结果

python - wx.TextCtrl 和 wx.Validator

python - 轮廓中的质心(Python、OpenCV)

python - 从python中的字符串中提取值

python - 获取两个 numpy 数组之间更改数据的索引

python - 绑定(bind)到 wxpython 小部件的调整大小事件的函数在调整大小时被多次调用

python - 如何向 ObjectListView wxPython 添加仪表或进度条?

python-3.x - 如何在 Wxpython PseudoDC 中返回 wx.Rect 中的 ID