2

我对 wxPython 很陌生,所以我希望没有什么基本的东西可以忽略:我想使用 SplitterWindow 将 Frame 的内容拆分为两个可调整大小的子窗口(A 和 B),但我想要一个窗口(B)有一个 MaxSize 集。

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

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

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

这是我的代码:

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 填满。

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

谢谢,丹尼尔

4

1 回答 1

4

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

SetSashGravity(0.5)

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

请参阅SetSashGravity的文档

于 2011-09-26T22:07:53.497 回答