2009-08-14 59 views
10

我在各種sizer中有幾個按鈕,它們以我希望的方式擴展。但是,當我將父項添加到新的wx.BoxSizer中,該新的wx.BoxSizer用於在框架中的所有元素周圍添加邊框時,添加的sizer功能垂直正確,但不水平。wxPython:BoxSizer中的項目不會水平擴展,只能垂直擴展

下面的代碼演示了此問題:

#! /usr/bin/env python 

import wx 
import webbrowser 

class App(wx.App): 


    def OnInit(self): 
     frame = MainFrame() 
     frame.Show() 
     self.SetTopWindow(frame) 
     return True 


class MainFrame(wx.Frame): 

    title = 'Title' 


    def __init__(self): 
     wx.Frame.__init__(self, None, -1, self.title) 

     panel = wx.Panel(self) 

     #icon = wx.Icon('icon.png', wx.BITMAP_TYPE_PNG) 
     #self.SetIcon(icon) 

     sizer = wx.FlexGridSizer(rows=2, cols=1, vgap=10, hgap=10) 

     button1 = wx.Button(panel, -1, 'BUTTON') 
     sizer.Add(button1, 0, wx.EXPAND) 

     buttonSizer = wx.FlexGridSizer(rows=1, cols=4, vgap=10, hgap=5) 

     buttonDelete = wx.Button(panel, -1, 'Delete') 
     buttonSizer.Add(buttonDelete, 0, 0) 

     buttonEdit = wx.Button(panel, -1, 'Edit') 
     buttonSizer.Add(buttonEdit, 0, 0) 

     buttonNew = wx.Button(panel, -1, 'New') 
     buttonSizer.Add(buttonNew, 0, 0) 

     buttonSizer.AddGrowableCol(0, 0) 

     sizer.Add(buttonSizer, 0, wx.EXPAND|wx.HORIZONTAL) 

     sizer.AddGrowableCol(0, 0) 
     sizer.AddGrowableRow(0, 0) 

     mainSizer = wx.BoxSizer(wx.EXPAND) 
     mainSizer.Add(sizer, 0, wx.EXPAND|wx.ALL, 10) 

     #panel.SetSizerAndFit(sizer) 
     #sizer.SetSizeHints(self) 
     panel.SetSizerAndFit(mainSizer) 
     mainSizer.SetSizeHints(self) 


if __name__ == '__main__': 
    app = App(False) 
    app.MainLoop() 

註釋掉線和和取消註釋行和去除多餘的BoxSizer並表明我是多麼期望一切功能(當然沒有空白)。

我完全被這個問題所困擾,仍然不知道如何解決這個問題。

回答

24

首先,你錯誤地傳遞了一些標誌。 BoxSizer需要wx.HORIZONTAL或wx.VERTICAL,而不是wx.EXPAND。 sizer.Add不需要wx.HORIZONTAL。

如果您有VERTICAL BoxSizer,wx.EXPAND將使控件水平填充,而1或更多的比例(添加的第二個參數)將使控件垂直填充。這與HORIZONTAL BoxSizers相反。

sizer = wx.BoxSizer(wx.VERTICAL) 
sizer.Add(widget1, 0, wx.EXPAND) 
sizer.Add(widget2, 1) 

widget1將水平展開。 widget2將垂直擴展。

如果您將sizer放入另一個sizer中,則需要確保設置其比例和EXPAND標誌,以便其內部將按照您希望的方式增長。

我會把剩下的給你。