BoxSizer: 一个BoxSizer是一个垂直列、水平行,窗口部件在其中从左到右或从上到下布置在一条线上。
使用BoxSizer设置登录界面布局:
import wx # 导入wxPython
class MyFrame(wx.Frame):
def __init__(self,parent,id):
wx.Frame.__init__(self,parent,id,'用户登录',size=(400,300))
# 创建面板
penel = wx.Panel(self)
# 创建'确定'和'取消'按钮,并绑定事件
self.bt_confirm = wx.Button(penel,label='确定')
self.bt_cancel = wx.Button(penel,label='取消')
# 创建文本
self.title = wx.StaticText(penel,label='请输入用户名和密码')
self.label_user = wx.StaticText(penel,label='用户名:')
self.text_user = wx.TextCtrl(penel,style=wx.TE_LEFT)
self.label_pwd = wx.StaticText(penel,label='密 码:')
self.text_password = wx.TextCtrl(penel,style=wx.TE_PASSWORD)
# 添加容器,容器中控件横向列表
hsizer_user = wx.BoxSizer(wx.HORIZONTAL)
hsizer_user.Add(self.label_user,proportion=0,flag=wx.ALL,border=5)
hsizer_user.Add(self.text_user,proportion=1,flag=wx.ALL,border=5)
hsizer_pwd = wx.BoxSizer(wx.HORIZONTAL)
hsizer_pwd.Add(self.label_pwd,proportion=0,flag=wx.ALL,border=5)
hsizer_pwd.Add(self.text_password,proportion=1,flag=wx.ALL,border=5)
hsizer_button = wx.BoxSizer(wx.HORIZONTAL)
hsizer_button.Add(self.bt_confirm,proportion=0,flag=wx.ALIGN_CENTER,border=5)
hsizer_button.Add(self.bt_cancel,proportion=0,flag=wx.ALIGN_CENTER,border=5)
# 添加容器,容器中控件纵向排列
vsizer_all = wx.BoxSizer(wx.VERTICAL)
vsizer_all.Add(self.title,proportion=0,flag=wx.BOTTOM|wx.Top|wx.ALIGN_CENTER,border=15)
vsizer_all.Add(hsizer_user,proportion=0,flag=wx.EXPAND|wx.LEFT|wx.RIGHT,border=45)
vsizer_all.Add(hsizer_pwd,proportion=0,flag=wx.EXPAND|wx.LEFT|wx.RIGHT,border=45)
vsizer_all.Add(hsizer_button,proportion=0,flag=wx.ALIGN_CENTER|wx.TOP,border=15)
penel.SetSizer(vsizer_all)
if __name__ == '__main__':
app = wx.App() # 初始化
frame = MyFrame(parent=None,id=-1) # 实例化Frame类,并传递参数
frame.Show() # 显示窗口
app.MainLoop() # 调用主循环方法
窗口:
首先创建按钮控件和文本控件,然后将他们添加到容器中,并且设置横向排列。接着设置纵向排列。在布局的过程中,通过设置每个控件的flag和border参数,实现控件位置间的布局
BoxSizer就会将绝对位置更改为相对位置的布局