我试图理解如何使用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。
2条答案
按热度按时间k5ifujac1#
我遇到了同样的问题,通过试验和错误,我得到了这个修改解决了问题
但这取决于帧的大小。
我使用的是wxpython版本3.0.0.0
ruyhziif2#
我知道这条线是古老的,但如果其他人有这个问题:
来自维基:https://wxpython.org/Phoenix/docs/html/wx.SplitterWindow.html#wx.SplitterWindow.SetSashGravity
请注意,当为新创建的拆分窗口设置窗格重力时,通常需要使用SetSize显式设置拆分器大小,以确保对于其初始窗格位置来说足够大。否则,即如果窗口是使用默认的小尺寸创建的,并且只是在以后才调整到正确的大小,初始窗扇位置将受到重力的影响
使用
splitter.SetInitialSize(...)
手动设置大小(显然取决于帧大小),或者使用splitter.SetSashGravity(.5)
使它们均匀增长。