2010-06-23 42 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