WxPython wxSplitterWindow.SplitVertically总是显示不均匀的分割

cgyqldqp  于 2022-10-30  发布在  Python
关注(0)|答案(2)|浏览(105)

我试图理解如何使用wxSplitterWindow类,但似乎无法使垂直拆分均匀(即左右窗格占用相同的空间)。根据wxPython 3.03文档,wxSplitterWindow.SplitVertically具有以下签名:

SplitVertically(self, window1, window2, sashPosition=0)

最后一个参数sashPosition的说明如下:
sashPosition -框格的初始位置。如果此值为正数,则指定左窗格的大小。如果为负数,则为右窗格大小的绝对值。最后,指定0(默认值)以选择默认位置(总窗口宽度的一半)。
从描述中,我推测为sashPosition传递一个0会将窗口一分为二,左右窗格占据相等的空间。但是,当我运行下面的示例程序时,我得到了一个不均匀拆分的窗口,几乎所有的左窗格都被隐藏了。

import wx

class SplitterFrame(wx.Frame):

    def __init__(self):

        wx.Frame.__init__(self, None, title='SplitterWindow example')

        # Create the main splitter window (to be split vertically)
        self.splitter = wx.SplitterWindow(self)
        self.rightPanel = wx.Panel (self.splitter)
        self.rightPanel.SetBackgroundColour(wx.BLUE)
        self.leftPanel = wx.Panel (self.splitter)
        self.leftPanel.SetBackgroundColour(wx.RED)

        # Expecting an even split with this call        
        self.splitter.SplitVertically (self.leftPanel, self.rightPanel, 0)

if __name__ == '__main__':
    app = wx.App(0)
    frame = SplitterFrame()
    frame.Show()
    app.MainLoop()

我在Windows 8.1机器上使用wxPython v3.0工具包运行Python v2.7.10。

k5ifujac

k5ifujac1#

我遇到了同样的问题,通过试验和错误,我得到了这个修改解决了问题

self.splitter.SplitHorizontally(self.leftPanel, self.rightPanel, 100)

但这取决于帧的大小。
我使用的是wxpython版本3.0.0.0

ruyhziif

ruyhziif2#

我知道这条线是古老的,但如果其他人有这个问题:
来自维基:https://wxpython.org/Phoenix/docs/html/wx.SplitterWindow.html#wx.SplitterWindow.SetSashGravity
请注意,当为新创建的拆分窗口设置窗格重力时,通常需要使用SetSize显式设置拆分器大小,以确保对于其初始窗格位置来说足够大。否则,即如果窗口是使用默认的小尺寸创建的,并且只是在以后才调整到正确的大小,初始窗扇位置将受到重力的影响
使用splitter.SetInitialSize(...)手动设置大小(显然取决于帧大小),或者使用splitter.SetSashGravity(.5)使它们均匀增长。

相关问题