Bas*_*ard 4 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')
Run Code Online (Sandbox Code Playgroud)
我有一个框架包含几个面板,包括这个面板,尺寸由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)
Run Code Online (Sandbox Code Playgroud)
当然可以使用一个项目,但如果我想稍后垂直添加项目并仍然使它们都展开(例如,当用户的窗口展开时)怎么办?
编辑:嗯,我刚发现必须使用这个比例才能让boxsizers以两种方式成长.(即,在1 BoxSizer.Add的呼叫中将0替换为0.)
wx.Frame如果只有一个孩子,A 会自动执行此操作.但是,a 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))
Run Code Online (Sandbox Code Playgroud)
我把padding属性作为额外奖励扔在那里.随意使用它或抛弃它.
| 归档时间: |
|
| 查看次数: |
5689 次 |
| 最近记录: |