【问题标题】:Keeping Panels From Growing in wxPython防止面板在 wxPython 中增长
【发布时间】:2013-02-24 00:02:52
【问题描述】:

我正在尝试在 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()

我的问题:

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

【问题讨论】:

    标签: python user-interface resize wxpython boxsizer


    【解决方案1】:

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

    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的__init__函数中添加self.SetupScrolling(),这是滚动面板运行所必需的。然后当面板的内容大到需要滚动条时,就会被添加。

    【讨论】:

    • 很好的答案 - 非常感谢!您对标志/增长比例的解释帮助我更加了解 wxPython。
    • 我同意allie,你在文档中找不到这种解释。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-28
    • 2020-08-20
    相关资源
    最近更新 更多