在wxPython中保持面板不增长

cry*_*tar 2 python user-interface wxpython resize boxsizer

我正在尝试在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()
Run Code Online (Sandbox Code Playgroud)

我的问题:

  1. 如何使用sizer来确保只有正确的面板展开,并且只能水平展开?目前左侧面板的内容保持固定,但面板本身仍然在扩展.
  2. 如果我想略微修改第一个问题,只有右边水平展开,但两个面板都垂直展开,我还需要做什么?
  3. 我正在使用wx.lib.scrolledpanel作为右侧面板的x轴,但我似乎无法水平收缩窗口以使其显示.我不确定是否有关于混合/最大面板尺寸等的设置可能对此有帮助吗?

Jas*_*ers 6

1:proportion在将两个面板添加到主sizer时,使用sizer.Add中的参数:

mainSzr.Add(posPnl, 0)
mainSzr.Add(posPnl2, 1)
Run Code Online (Sandbox Code Playgroud)

比例会影响该面板与所有其他同级大小调整器成比例的大小(其中0表示不调整大小).旗帜wx.FIXEDwx.GROW你的目标无关.

http://wxpython.org/docs/api/wx.Sizer-class.html#Add

因此,举例来说,如果你想要增加,但增长速度是左边两倍的权利,你可以使用:

mainSzr.Add(posPnl, 1)
mainSzr.Add(posPnl2, 2)
Run Code Online (Sandbox Code Playgroud)

2:使用wx.EXPAND标志在水平尺寸扩展器中进行扩展以填充其垂直空间(反之亦然,用于垂直尺寸/水平空间).

mainSzr.Add(posPnl, 0, wx.EXPAND)
mainSzr.Add(posPnl2, 1, wx.EXPAND)
Run Code Online (Sandbox Code Playgroud)

3:添加一个self.SetupScrolling()TimelinePanel的__init__功能,这是滚动面板运行所必需的.然后,当面板的内容足够大以至于需要滚动条时,它将被添加.