速覽:
步驟:創建sizer -> 添加控件 -> 設置sizer
1 | wx.BoxSizer |
2 | wx.StaticBoxSizer |
3 | wx.GridSizer |
4 | wx.FlexGridSizer |
5 | wx.GridBagSizer |
構造方法:__init__(self,orient=wx.HORIZONTAL)
wx.HORIZONTAL | 水平sizer |
wx.VERTICAL | 垂直sizer |
Add方法:Add(self,window,proportion=0,flag=0,border=0)
wx.TOP | 具有上邊框 |
wx.BOTTOM | 具有下邊框 |
wx.LEFT | 具有左邊框 |
wx.RIGHT | 具有右邊框 |
wx.ALL | 具有全邊框 |
wx.EXPAND | 擴展到最大 |
wx.ALIGN_CENTER | 居中 |
wx.ALIGN_LEFT | 居左 |
wx.ALIGN_RIGHT | |
wx.ALIGN_TOP | |
wx.ALIGN_BOTTOM | |
wx.ALIGN_CENTER_VERTICAL | 垂直居中 |
wx.ALIGN_CENTER_HORIZONTAL |
提示:先添加的控件排列在左/上
設置sizer時只需設置頂層sizer
wx.BoxSizer是wxpython中最基本的一個sizer
它可以在水平/垂直方向上管理控件
sizer可以幫助你布局你的空間
它是wxpython的靈魂之一
wxpython中有五種sizer
1 | wx.BoxSizer |
2 | wx.StaticBoxSizer |
3 | wx.GridSizer |
4 | wx.FlexGridSizer |
5 | wx.GridBagSizer |
其中wx.BoxSizer是最簡單的也是最靈活的
1.wx.BoxSizer最基本的用法
text1 = wx.TextCtrl(panel) #創建控件 text2 = wx.TextCtrl(panel) sizer = wx.BoxSizer(wx.VERTICAL) #創建sizer sizer.Add(text1,1,wx.EXPAND) #在sizer中添加控件 sizer.Add(text2,1,wx.EXPAND) panel.SetSizer(sizer) #設置sizer到panel
解釋:
1.因為有sizer自動管理空間的位置大小,所以text就不指定大小位置了
2.BoxSizer默認模式是水平的wx.HORIZONTAL,也可以設置為垂直的wx.VERTICAL
3.使用sizer的Add方法添加控件
4.最后使用panel的SetSizer方法設置sizer
總結:創建sizer -> 添加控件 -> 設置sizer
2.sizer.Add方法詳解
這
是Add的一般用法,詳見文檔
Add (window,proportion=0, flag=0, border=0, userData=None)
控件 所占比例 標志 邊的寬度 用戶數據
所占比例指的是在所有控件中所占比例,0的話就是保持大小
比如我添加了兩個控件,一個的proportion參數為1,另一個也為1
那么結果就是這樣
他們各自占據sizer這個容器的一半,不管他們的外觀是否填充了整個區域,都是這樣分的
接下來是flag參數
wx.TOP | 具有上邊框 |
wx.BOTTOM | 具有下邊框 |
wx.LEFT | 具有左邊框 |
wx.RIGHT | 具有右邊框 |
wx.ALL | 具有全邊框 |
wx.EXPAND | 擴展到最大 |
wx.ALIGN_CENTER | 居中 |
wx.ALIGN_LEFT | 居左 |
wx.ALIGN_RIGHT | |
wx.ALIGN_TOP | |
wx.ALIGN_BOTTOM | |
wx.ALIGN_CENTER_VERTICAL | 垂直居中 |
wx.ALIGN_CENTER_HORIZONTAL |
border參數只有在具有wx.TOP等參數是才有用
3.sizer的嵌套
先來看一張ui布局圖
大致可分為三個區域,分別用紅藍綠進行標識
紅色為sizer1
藍色為sizer2
綠色為sizer3
代碼如下
'控件' self.start_btn = wx.Button(self.panel,wx.ID_OK,label='開始',pos=(0,100)) self.end_btn = wx.Button(self.panel,wx.ID_CANCEL,label='退出',pos=(0,100)) self.preview = wx.Panel(self.panel) self.preview.SetBackgroundColour('Black') self.text = wx.TextCtrl(self.panel,pos=(0,0),style=wx.TE_MULTILINE) '尺寸器' self.sizer1 = wx.BoxSizer(wx.HORIZONTAL) self.sizer2 = wx.BoxSizer(wx.VERTICAL) self.sizer3 = wx.BoxSizer(wx.HORIZONTAL) self.sizer4 = wx.BoxSizer() '添加東西' self.sizer1.Add(self.start_btn,0,wx.ALIGN_TOP|wx.TOP,50) self.sizer1.Add(self.end_btn,0,wx.ALIGN_TOP|wx.TOP,50)
self.sizer2.Add(self.text,3,wx.EXPAND) self.sizer2.Add(self.sizer1,1,wx.ALIGN_CENTER_HORIZONTAL)
self.sizer3.Add(self.preview,2,wx.EXPAND) self.sizer3.Add(self.sizer2,1,wx.EXPAND|wx.LEFT,30)
self.sizer4.Add(self.sizer3,1,wx.EXPAND|wx.ALL,30) '設置尺寸器' #self.panel.SetSizer(self.sizer1) #self.panel.SetSizer(self.sizer2) #self.panel.SetSizer(self.sizer3) self.panel.SetSizer(self.sizer4)
首先把兩個按鈕添加到sizer1中,
在吧文本框和sizer1添加到sizer2里
最后把預覽框與sizer2一起添加到sizer3里
sizer4的作用是添加統一的邊框
最后注意只設置頂級sizer
不然程序會報錯