wxPython:一个Subwindow的SplitterWindow和SetMaxSize

时间:2011-09-26 21:25:56

标签: python wxpython splitter sizer

我对wxPython很安静,所以我希望我没有什么基本的东西可以忽略: 我想使用SplitterWindow将我的Frame的内容分成两个可调整大小的子窗口(A和B),但我希望其中一个窗口(B)设置MaxSize。

不幸的是,这会带来一个问题:

  1. 当我调整大小(放大)时,整个框架(我正在尝试适应这里的wxPython术语;通常,我会说:调整窗口大小),我希望曾经的窗口的maxSize到达B,窗口A将自动放大以填充框架的整个内容。可悲的是,事实并非如此。

  2. 如何确保我无法将窗扇向左移动(减小窗口B的大小)?在当前情况下,Window B只向左移动(不改变宽度)并暴露WindowSplitter的蓝色背景。

  3. 这是我的代码:

    import wx         
    
    class MainWindow(wx.Frame):
    
        def __init__(self, parent, title):
            wx.Frame.__init__(self, parent, title=title, size=(500,300))
    
            # Create View
            self.loadView()
    
            #self.SetAutoLayout(1)
            self.GetSizer().Fit(self)
            self.Centre()
            self.Show()
    
        def loadView(self):        
            splitter = wx.SplitterWindow(self, wx.ID_ANY, style = wx.SP_BORDER, size=(500, 300))
            splitter.SetBackgroundColour('#0000ff')
    
            panelLeft = wx.Panel(splitter, size=(200,100))
            panelLeft.SetBackgroundColour('#00ff00')
    
            panelRight = wx.Panel(splitter, size=(200,100))
            panelRight.SetBackgroundColour('#ff0000')
            panelRight.SetMaxSize((200, -1))
    
            splitter.SplitVertically(panelLeft, panelRight)
    
            self.SetSizer(wx.BoxSizer(wx.HORIZONTAL))
            self.GetSizer().Add(splitter, 1, wx.EXPAND)
    
    
    app = wx.App(False)
    frame = MainWindow(None, "Test")
    app.MainLoop()
    

    一张图片说千言万语:enter image description here 蓝色区域是分割器的一部分,但没有被窗口A填充。

    赞赏任何正确方向的帮助/提示。

    谢谢, 丹尼尔

1 个答案:

答案 0 :(得分:4)

我不再积极使用wx,因此无法测试解决方案。但是我相信你要找的是

SetSashGravity(0.5)

SplitterWindow的默认行为是在Resize事件时,只会调整Right或Bottom窗口的大小。在你的情况下,你已经在该窗口上施加了最大尺寸。

请参阅SetSashGravity

的文档