让WxPython面板项目扩展

4

我有一个包含单个项目的 WxPython 框架,例如:

class Panel(wx.Panel):
    def __init__(self, parent):
        wx.Panel.__init__(self, parent)
        self.text = wx.StaticText(self, label='Panel 1')

我有一个包含多个面板的框架,其中包括这个面板,尺寸由 sizer 控制。 我希望这个 StaticText 能够扩展。 使用仅包含文本的 BoxSizer 并设置 wx.EXPAND 标志可以解决问题,但似乎为一个项目使用 sizer 不太合适。
有更简单的解决方案吗?
(我可以直接将 StaticText 添加到父框架的 sizer 中,但对于我的设计来说,从框架直接开始更有意义。)
我刚意识到,当创建一个仅包含一个项目的 BoxSizer 时,无法使用 wx.VERTICAL
class Panel1(wx.Panel):
    def __init__(self, parent):
        wx.Panel.__init__(self, parent)
        self.BackgroundColour = 'red'
        sizer = wx.BoxSizer(wx.VERTICAL)
        self.Sizer = sizer
        self.list = wx.ListBox(self, choices=[str(i) for i in xrange(100)])
        sizer.Add(self.list, 0, wx.EXPAND)
        sizer.Fit(self)

当然,只有一个项目是可以的,但如果我想稍后垂直添加一个项目并仍然使它们都扩展呢(例如,当用户的窗口被扩展时)?
编辑:啊,我刚刚发现必须使用比例才能使框布局管理器在两个方向上增长。(即,在 BoxSizer.Add 的调用中将 0 替换为 1。)
1个回答

8
如果一个wx.Frame只有一个子元素,它会自动处理此事。然而,wx.Panel不会自动处理这个问题。你需要使用一个sizer来解决这个问题。如果你发现自己经常这样做,可以创建一个方便的函数:
def expanded(widget, padding=0):
    sizer = wx.BoxSizer(wx.VERTICAL)
    sizer.Add(widget, 1, wx.EXPAND|wx.ALL, padding)
    return sizer

class Panel(wx.Panel):
    def __init__(self, parent):
        wx.Panel.__init__(self, parent)
        self.text = wx.StaticText(self, label='Panel 1')
        self.SetSizer(expanded(self.text))

我额外加了填充属性(padding attribute),你可以自由选择使用或者不用。


是的,比例使其沿着大小调整。wx.EXPAND使其扩展以填充其他方向。同时使用它们两个来在两个方向上增长。 - FogleBird

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接