2010-06-23 40 views
3

我有一个包含单个条目的wxPython的帧,如:获得一个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父框架的分级机直接,但对我的设计更有意义,直接开始帧)。


我才意识到,在创建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)。

回答

6

A 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)) 

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

+0

谢谢。你对我的编辑有任何想法吗? – 2010-06-23 21:51:02

+0

是的,比例使它在sizer的方向上成长。 wx.EXPAND使它扩展到填充另一个方向。使用它们都可以在两个方向上增长。 – FogleBird 2010-06-24 01:46:07