4

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

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

我有一个包含几个面板的框架,包括这个,尺寸由尺寸确定。我希望这个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 双向增长。(即,将 0 替换为 1BoxSizer.Add调用。)

4

1 回答 1

8

如果 Awx.Frame只有一个孩子,它将自动执行此操作。但是,awx.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))

我把填充属性扔在那里作为额外的奖励。随意使用它或放弃它。

于 2010-06-23T18:44:46.700 回答