一、绝对布局
panel = wx.Panel(self.frame)
panel1 = wx.Panel(panel,pos=(0,0), size=(250, wx.EXPAND)) #设置宽度为250,高度撑满;并且起点为之为(0,0)
panel1.SetBackgroundColour("yellow")
panel2 = wx.Panel(panel,pos=(255,0), size=(wx.EXPAND, wx.EXPAND)) #设置宽度和高度都撑满
panel2.SetBackgroundColour("green")
运行结果如下(其他部分代码省略,只给出了主题部分pannel的布局代码):
二、使用Sizer来进行布局
Sizer布局包含以下几类布局管理器:
参考地址:
https://docs.wxwidgets.org/stable/classwx_sizer.html
http://xoomer.virgilio.it/infinity77/wxPython/Widgets/wx.Sizer.html
BoxSizer,可设置水平或垂直布局,当控件超出窗体后不会自动换行:
def createPanel3(self):
# 创建面板
panel = wx.Panel(self.frame)
vbox = wx.BoxSizer(wx.VERTICAL) #设置水平方向布局
but1 = wx.Button(panel,wx.ID_ANY,"button1")
but2 = wx.Button(panel, wx.ID_ANY, "button2")
but3 = wx.Button(panel, wx.ID_ANY, "button3")
but4 = wx.Button(panel, wx.ID_ANY, "button4")
but5 = wx.Button(panel, wx.ID_ANY, "button5")
but6 = wx.Button(panel, wx.ID_ANY, "button6")
but7 = wx.Button(panel, wx.ID_ANY, "button7")
but8 = wx.Button(panel, wx.ID_ANY, "button8")
but9 = wx.Button(panel, wx.ID_ANY, "button9")
but10 = wx.Button(panel, wx.ID_ANY, "button10")
vbox.Add(but1)
vbox.Add(but2,flag=wx.ALIGN_CENTER) #设置相对于窗口居中对齐
vbox.Add(but3)
vbox.Add(but4)
vbox.Add(but5)
vbox.Add(but6)
vbox.Add(but7)
vbox.Add(but8)
vbox.Add(but9)
vbox.Add(but10)
panel.SetSizer(vbox)
运行结果:
StaticBoxSizer,在BoxSizer外面加了一个静态的边框以及标签,他可以独立的存在也可以放到其他布局管理器中进行嵌套:
panel = wx.Panel(self.frame)
vbox = wx.BoxSizer(wx.VERTICAL)
Svbox = wx.StaticBoxSizer(wx.VERTICAL,panel,"StaticBoxSizer布局") # 设置水平方向布局
vbox.Add(Svbox) #将StaticBoxSizer嵌套到BoxSizer中
but1 = wx.Button(panel, wx.ID_ANY, "button1")
but2 = wx.Button(panel, wx.ID_ANY, "button2")
but3 = wx.Button(panel, wx.ID_ANY, "button3")
but4 = wx.Button(panel, wx.ID_ANY, "button4")
Svbox.Add(but1)
Svbox.Add(but2) # 设置相对于窗口居中对齐
Svbox.Add(but3)
Svbox.Add(but4)
panel.SetSizer(vbox)
运行结果:
FlexGridSizer,网格布局,特点是可以设置网格之间的显示比例:
panel = wx.Panel(self.frame)
fgs = wx.FlexGridSizer(1, 2, 0, 5) #设置为1行,2列,列间距为5
panel1 = wx.Panel(panel, size=(0, wx.EXPAND))
panel1.SetBackgroundColour("yellow")
panel2 = wx.Panel(panel, size=(0, wx.EXPAND))
panel2.SetBackgroundColour("green")
fgs.Add(panel1, 0, wx.EXPAND)
fgs.Add(panel2, 0, wx.EXPAND)
fgs.AddGrowableCol(0, 1) #指定第一列占1/3的宽度
fgs.AddGrowableCol(1, 2) #指定第二列占2/3的宽度
panel.SetSizer(fgs)
运行结果: