我有一个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
标志可以做到这一点,但仅为一个项目使用大小调整器似乎很愚蠢。有更简单的解决办法吗?
(我可以直接将
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在两个方面都增长,必须使用这个比例(即,在
BoxSizer.Add
调用中将0替换为1。) 最佳答案
如果只有一个孩子,wx.Frame
将自动执行此操作但是,awx.Panel
不会自动执行此操作你用的是定型机。如果你发现自己经常这么做,就做一个方便的功能:
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属性作为额外的奖励。你可以随意使用或丢弃它。