获取WxPython面板项以进行扩展

时间:2010-06-23 18:11:18

标签: python wxpython frame sizer

我有一个包含单个项目的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)

当然可以使用一个项目,但是如果我想稍后垂直添加项目并仍然使它们都展开(例如,当用户的窗口展开时)该怎么办?

编辑:啊,我刚刚发现必须使用这个比例才能让boxsizers以两种方式成长。 (即在BoxSizer.Add的通话中将0替换为1。)

1 个答案:

答案 0 :(得分:6)

如果只有一个孩子,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属性作为额外奖励扔在那里。随意使用它或抛弃它。