wx.BoxSizer

速览:

步骤创建sizer -> 添加控件 -> 设置sizer

sizer
1 wx.BoxSizer
2 wx.StaticBoxSizer
3 wx.GridSizer
4 wx.FlexGridSizer
5 wx.GridBagSizer

 

 

 

 

 

构造方法:__init__(self,orient=wx.HORIZONTAL)

orient
wx.HORIZONTAL 水平sizer
wx.VERTICAL 垂直sizer

 

 

 

Add方法:Add(self,window,proportion=0,flag=0,border=0)

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  

 

 

 

 

 

 

 

 

 

 

提示:先添加的控件排列在左/上

设置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

不然程序会报错

posted @ 2019-09-12 09:26  jawide  阅读(1615)  评论(0编辑  收藏  举报