wxPython:SplitterWindow和子窗口的SetMaxSize
我刚接触wxPython,所以希望没有遗漏什么基本的东西:
我想用一个SplitterWindow把我的窗口内容分成两个可以调整大小的子窗口(A和B),但我希望其中一个窗口(B)有一个最大尺寸限制。
不幸的是,这带来了问题:
当我调整整个窗口的大小(我在这里尽量用wxPython的术语;通常我会说:调整窗口的大小),我希望一旦窗口B达到了最大尺寸,窗口A能自动扩大,填满整个窗口的内容。但可惜的是,这并没有发生。
我该如何确保我不能把分隔条向左移动(也就是减小窗口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 的文档。