Skip to main content
 首页 » 编程设计

python之像 FourWaySplitter 但不同

2025年05月04日11yyy_WW

使用 Python 2.6,wx.Python:

想知道是否有人可能知道如何在不使用 FourWaySplitter 的情况下构建一个四面板窗口。 (除非我错了,否则 FourWaySplitter 将执行我将要描述的操作。使用 FourWaySplitter,任何子面板大小的任何变化都会改变所有子面板的大小。)

这是我需要的:

一个垂直分割和两个独立水平分割,一个在每个新分割的垂直部分上。 (听起来很简单,但在尝试了 splitter 和 sizer 的每一种排列之后,我终于承认失败了。)

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

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

请您参考如下方法:

这也让我很困惑。幸运的是,我想写一篇关于这个主题的文章,并且在一三个月前的几个小时后终于想通了。我还没有写这篇文章,但是为了这个答案,我稍微配对了我的例子。希望你能关注它:

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() 

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