使用 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 上有效
