像FourWaySplitter一样但不同

时间:2011-12-10 21:06:20

标签: python wxpython

使用Python 2.6,wx.Python:

想知道是否有人可能知道如何使用FourWaySplitter构建四个面板窗口。 (除非我错了,FourWaySplitter会做我将要描述的内容。使用FourWaySplitter,任何子面板大小的任何变化都会改变所有子面板的大小。)

这就是我需要的:

一个垂直分割和两个 INDEPENDENT 水平分割每个新分割的垂直部分。 (听起来很简单,但经过一天尝试拆分器和分级器后,我终于承认了失败。)

无论如何,我们的想法是只有垂直分割器会改变所有四个窗口的大小。垂直分离器左侧的水平分离器只会改变垂直分离器左侧的两个窗口/面板,而垂直分离器右侧的水平分割器只会改变右侧的两个窗口/面板垂直分离器。

一个具体的工作实例会得到很多帮助,非常感谢,如果你来我家,我会给你一些煎饼。

1 个答案:

答案 0 :(得分:0)

这对我来说也很混乱。幸运的是,我想写一篇关于这个主题的文章,我终于在一个月或三个月之前的几个小时后弄明白了。我还没有写过这篇文章,但是为了这个答案,我把我的例子配对了一点。希望你能遵循它:

import random
import wx

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

    #----------------------------------------------------------------------
    def __init__(self, parent):
        """Constructor"""
        wx.Panel.__init__(self, parent)
        color = random.choice(["red", "green", "blue", "yellow"])
        self.SetBackgroundColour(color)               

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

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

        # create the sizers
        sizer = wx.BoxSizer(wx.VERTICAL)
        twoSplitSizer = wx.BoxSizer(wx.HORIZONTAL)
        verticalSplitter = wx.SplitterWindow(self)

        # create the left side
        leftSplitter = wx.SplitterWindow(verticalSplitter)
        panelOne = RandomPanel(leftSplitter)
        panelTwo = RandomPanel(leftSplitter)
        leftSplitter.SplitHorizontally(panelOne, panelTwo)
        leftSplitter.SetSashGravity(0.5)

        # create the remote side
        rightSplitter = wx.SplitterWindow(verticalSplitter)
        panelThree = RandomPanel(rightSplitter)
        panelFour = RandomPanel(rightSplitter)
        rightSplitter.SplitHorizontally(panelThree, panelFour)
        rightSplitter.SetSashGravity(0.5)

        verticalSplitter.SplitVertically(leftSplitter, rightSplitter)
        verticalSplitter.SetSashGravity(0.5)

        sizer.Add(verticalSplitter, 1, wx.EXPAND)
        self.SetSizer(sizer)

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

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


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

我使用随机颜色只是为了更容易区分面板。通常,每个面板上都有不同的小部件。无论如何,这对我在Windows上使用wxPython 2.8.11