我正在尝试在wxPython中安排一些面板。布局的粗略表示形式如下:
基本上,我正在寻找一个左右面板,这样 - 当调整大小时 - 左(橙色)面板(及其内容)永远不会调整大小,右(蓝色)面板可以拉伸/增长必要时,但只是水平。
我到目前为止的代码(带有一些随机填充小部件)如下所示。我的问题遵循以下代码:
import wx
import wx.lib.scrolledpanel as scrolled
class MainWindow(wx.Frame):
def __init__(self, parent, title):
wx.Frame.__init__(self, parent)
#add position panel
posPnl = IdPanel(self)
lbl1 = wx.StaticText(posPnl, label="Position")
lbl2 = wx.StaticText(posPnl, label="Size")
sizeCtrl = wx.TextCtrl(posPnl)
posPnlSzr = wx.BoxSizer(wx.VERTICAL)
posPnlSzr.Add(lbl1, 1, wx.FIXED&wx.LEFT)
posPnlSzr.Add(sizeCtrl, 1, wx.LEFT&wx.FIXED)
posPnlSzr.Add(lbl2, 1, wx.FIXED&wx.LEFT)
posPnl.SetSizer(posPnlSzr)
posPnl2 = TimelinePanel(self)
lbl12 = wx.StaticText(posPnl2, label="Position")
lbl22 = wx.StaticText(posPnl2, label="Size")
sizeCtrl2 = wx.TextCtrl(posPnl2)
posPnlSzr2 = wx.BoxSizer(wx.VERTICAL)
posPnlSzr2.Add(lbl12, 1, wx.GROW)
posPnlSzr2.Add(sizeCtrl2, 1, wx.GROW)
posPnlSzr2.Add(lbl22, 1, wx.GROW)
posPnl2.SetSizer(posPnlSzr2)
mainSzr = wx.BoxSizer(wx.HORIZONTAL)
mainSzr.Add(posPnl, 1, wx.FIXED)
#mainSzr.AddSpacer(10)
mainSzr.Add(posPnl2, 1, wx.GROW)
self.SetSizerAndFit(mainSzr)
self.Show()
class IdPanel(wx.Panel):
def __init__(self, parent):
wx.Panel.__init__(self, parent, -1, size = (400, 200))
self.SetBackgroundColour((255, 0, 255))
class TimelinePanel(scrolled.ScrolledPanel):
def __init__(self, parent):
scrolled.ScrolledPanel.__init__(self, parent, -1, size = (300, 200))
self.SetBackgroundColour((255, 0, 0))
app = wx.App(False)
frame = MainWindow(None, "Trading Client")
app.MainLoop()
我的问题:
答案 0 :(得分:6)
1:在将两个面板添加到主分析器时,在sizer.Add中使用proportion
参数:
mainSzr.Add(posPnl, 0)
mainSzr.Add(posPnl2, 1)
比例会影响该面板与所有其他同级大小调整器成比例的大小(其中0表示不调整大小)。标志wx.FIXED
和wx.GROW
与您的目标无关。
http://wxpython.org/docs/api/wx.Sizer-class.html#Add
例如,如果你想要两者都增加,但是增长速度是左边两倍的权利,你可以使用:
mainSzr.Add(posPnl, 1)
mainSzr.Add(posPnl2, 2)
2:使用wx.EXPAND
标志在水平大小调整器中展开以填充其垂直空间(反之亦然,用于垂直大小调整/水平空间)。
mainSzr.Add(posPnl, 0, wx.EXPAND)
mainSzr.Add(posPnl2, 1, wx.EXPAND)
3:向TimelinePanel的self.SetupScrolling()
函数添加__init__
,这是滚动面板运行所必需的。然后当面板的内容足够大以至于需要滚动条时,它将被添加。