wxPython:SplitterWindow和子窗口的SetMaxSize

2 投票
1 回答
2961 浏览
提问于 2025-04-17 03:08

我刚接触wxPython,所以希望没有遗漏什么基本的东西:

我想用一个SplitterWindow把我的窗口内容分成两个可以调整大小的子窗口(A和B),但我希望其中一个窗口(B)有一个最大尺寸限制。

不幸的是,这带来了问题:

  1. 当我调整整个窗口的大小(我在这里尽量用wxPython的术语;通常我会说:调整窗口的大小),我希望一旦窗口B达到了最大尺寸,窗口A能自动扩大,填满整个窗口的内容。但可惜的是,这并没有发生。

  2. 我该如何确保我不能把分隔条向左移动(也就是减小窗口B的大小)?在目前的情况下,窗口B只是向左移动(宽度不变),露出了分隔条的蓝色背景。

这是我的代码:

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

一张图片胜过千言万语:在这里输入图片描述 蓝色区域是分隔条的一部分,但没有被窗口A填满。

任何帮助或提示都非常感谢。

谢谢,
丹尼尔

1 个回答

4

我现在不再积极使用wx,所以无法测试解决方案。不过,我认为你想要的东西是

SetSashGravity(0.5)

SplitterWindow的默认行为是,当窗口被调整大小时,只有右边或底部的窗口会被调整大小。而在你的情况下,你对那个窗口设置了最大大小。

可以查看关于 SetSashGravity 的文档。

撰写回答