創建wx.BoxSizer:
hbox = wx.BoxSizer(integer orient)
orient:(垂直方向)wx.VERTICAL 或(水平方向) wx.HORIZONTAL
hbox.Add(wx.Window window, integer proportion=0, integer flag = 0, integer border = 0)
window:需要添加到wx.BoxSizer的控件;
proportion:定義了控件在既定方向上所佔空間的比例,是相對的,相對於其他組件,比如:在水平sizer中有三個按鈕,porportion=0,表示保持本身大小;porportion=1,表示在水平方向上佔三分之一的空間;porportion=2,表示在水平方向上佔三分之二的空間。
flag:
flag參數定義了兩個主要的行爲:
第一個參數是窗口的邊框:這個參數決定了邊框的寬度,在此決定窗口某一側添加邊框的事件。
另一個參數決定了sizer事件的行爲,當sizer改變時,空間的分配。並且分配的多少依賴於特定種類的sizer被使用。
flag參數可以使用 '|'來產生組合的多個flags。常用的flag參數:
wx.TOPwx.BOTTOMwx.LEFTwx.RIGHTwx.ALLwx.EXPAND如果想在sizer分配給當前控件的空間之內調整控件佈局可用下面參數來實現:wx.ALIGN_LEFT wx.ALIGN_RIGHTwx.ALIGN_TOPwx.ALIGN_BOTTOMwx.ALIGN_CENTER_VERTICALwx.ALIGN_CENTER_HORIZONTALwx.ALIGN_CENTER
border:調整控件的邊框的寬度,此參數一般和flag參數配合使用。
如:hbox.Add(button, porprotion=1, flag=wx.EXPAND | wx.ALL,border= 20)
flag=wx.EXPAND | wx.ALL,border=20---------這代表的是button這個組件將充分的利用空間,但是會從四周預留出來20px作爲border。所以如果說使用了wx.EXPAND標誌,而沒有設定border,那麼我們的組件將充分的利用分配的空間。
vbox = wx.BoxSizer(wx.VERTICAL)
vbox.Add((-1, 20))
vbox.Add((-1, 20)) # 添加了20個像素的空白空間佈局分析:
上圖中佈局實現方法:
1、整體上控件佈局分上下兩個佈局,也就是我們需要創建一個垂直方向上的BoxSizer(v_box=wx.BoxSizer(wx.VERTICAL));
2、在分析上部分的控件的佈局,可以看出:靜態文本、輸入框、三個按鈕在同一水平方向上,由此我們需要創建一個水平方向上的BoxSizer佈局管理器(h_box=wx.BoxSizer(wx.HORIZONTAL));
3、然後把h_box佈局器放到v_box佈局管理器;
4、最後再把wx.TextCtrl控件放入v_box佈局管理器。
小技巧:控件一定要按需要佈局的順序放入BoxSizer佈局器中。
完整實例:
#!/usr/bin/env python
# -*- encoding:utf-8 -*-
import wx
class MyApp(wx.App):
def OnInit(self):
frame = MyFrame(parent=None, id=-1, title='ExampleBoxSizer')
frame.Show(True)
return True
class MyFrame(wx.Frame):
def __init__(self, parent, id, title):
wx.Frame.__init__(self, parent, id, title, size=(778, 494),
style=wx.DEFAULT_FRAME_STYLE | wx.RESIZE_BORDER | wx.MAXIMIZE_BOX)
self.panel = wx.Panel(self, -1)
h_box_sizer = wx.BoxSizer(wx.HORIZONTAL)
self.file_path = wx.TextCtrl(self.panel, -1)
self.open_button = wx.Button(self.panel, -1, label=u'打開')
self.save_button = wx.Button(self.panel, -1, label= u'保存')
h_box_sizer.Add(self.file_path, proportion=1, flag=wx.EXPAND | wx.ALL, border=5)
h_box_sizer.Add(self.open_button, proportion=0, flag= wx.ALL, border=5)
h_box_sizer.Add(self.save_button, proportion=0, flag= wx.ALL, border=5)
self.edit_text = wx.TextCtrl(self.panel, style=wx.TE_MULTILINE|wx.TE_RICH2|wx.HSCROLL)
v_box_sizer = wx.BoxSizer(wx.VERTICAL)
v_box_sizer.Add(h_box_sizer, proportion=0, flag=wx.EXPAND)
v_box_sizer.Add(self.edit_text, proportion=1, flag=wx.EXPAND, border=5)
self.panel.SetSizer(v_box_sizer)
def main():
app = MyApp()
app.MainLoop()
if __name__ == '__main__':
main()