一、絕對佈局
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)
運行結果: