我有一个包含单个项目的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。)
答案 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属性作为额外奖励扔在那里。随意使用它或抛弃它。