wx.BoxSizer
速览:
步骤:创建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
不然程序会报错