- wxPython 教程
- wxPython - 首頁
- wxPython - 簡介
- wxPython - 環境搭建
- wxPython - Hello World
- wxPython - GUI 構建工具
- wxPython - 主要類
- wxPython - 事件處理
- wxPython - 佈局管理
- wxPython - 按鈕
- wxPython - 可停靠視窗
- 多文件介面
- wxPython - 繪圖 API
- wxPython - 拖放操作
- wxPython 資源
- wxPython - 快速指南
- wxPython - 有用資源
- wxPython - 討論
wxPython - BoxSizer
此Sizer允許控制元件以行或列的方式排列。BoxSizer的佈局由其orientation引數(wxVERTICAL或wxHORIZONTAL)確定。
Box = wx.BoxSizer(wxHORIZONTAL) Box = wx.BoxSizer(wxVERTICAL)
Add()方法(繼承自wxSizer)將其新增到Sizer的下一行/列。
Box.Add(control, proportion, flag, border)
proportion引數控制控制元件如何響應容器尺寸變化而改變其大小。各種標誌引數的組合決定了控制元件在Sizer中的外觀。以下是一些標誌:
對齊標誌
| wx.ALIGN_TOP |
| wx.ALIGN_BOTTOM |
| wx.ALIGN_LEFT |
| wx.ALIGN_RIGHT |
| wx.ALIGN_CENTER_VERTICAL |
| wx.ALIGN_CENTER_HORIZONTAL |
邊框標誌
| wx.TOP |
| wx.BOTTOM |
| wx.LEFT |
| wx.RIGHT |
| wx.ALL |
行為標誌
| 序號 | 行為標誌及描述 |
|---|---|
| 1 | wx.EXPAND 專案將擴充套件以填充提供的空間(wx.GROW相同) |
| 2 | wx.SHAPED 類似於EXPAND,但保持專案的縱橫比 |
| 3 | wx.FIXED_MINSIZE 不允許專案小於其初始最小大小 |
| 4 | wx.RESERVE_SPACE_EVEN_IF_HIDDEN 不允許Sizer在專案隱藏時回收其空間 |
border引數是一個整數,表示控制元件之間要留出的畫素空間。例如,
b = wx.StaticText(self, -1, “Enter a number”) Box.Add(b,1,wx.ALL|wx.EXPAND,10)
以下是wx.BoxSizer類的更多方法:
| 序號 | 方法及描述 |
|---|---|
| 1 | SetOrientation() 設定方向 wxHORIZONTAL 或 wxVERTICAL |
| 2 | AddSpacer() 新增不可拉伸的空間 |
| 3 | AddStretchSpacer() 新增可拉伸的空間,以便調整視窗大小會按比例影響控制元件大小 |
| 4 | Clear() 從Sizer中移除子控制元件 |
| 5 | Detach() 從Sizer中移除控制元件而不銷燬 |
| 6 | Insert() 在指定位置插入子控制元件 |
| 7 | Remove() 從Sizer中移除子控制元件並銷燬它 |
示例
在下面的程式碼中,垂直BoxSizer應用於一個Panel物件,該物件放置在wxFrame視窗內。
p = wx.Panel(self) vbox = wx.wx.BoxSizer(wx.VERTICAL)
Box中的第一行在中心顯示一個標籤(wx.StaticText物件),周圍有20畫素的邊框。
l1 = wx.StaticText(p,label = "Enter a number",style = wx.ALIGN_CENTRE ) vbox.Add(l1,0, wx.ALL|wx.EXPAND|wx.ALIGN_CENTER_HORIZONTAL, 20)
第二行顯示一個wx.Button物件。由於使用了wx.EXPAND標誌,它佔據了視窗的整個寬度。
b1 = wx.Button(p, label = "Btn1") vbox.Add(b1,0, wx.EXPAND)
下一行也包含一個按鈕。它沒有新增EXPAND標誌。相反,由於ALIGN_CENTER_HORIZONTAL,預設大小的按鈕水平居中顯示。
b2 = wx.Button(p, label = "Btn2") vbox.Add(b2,0,wx.ALIGN_CENTER_HORIZONTAL)
下一行添加了一個TextCtrl物件,其proportion引數設定為1,並設定了EXPAND標誌。因此,它高度更高。
t = wx.TextCtrl(p) vbox.Add(t,1,wx.EXPAND,10)
最後一行包含一個水平Sizer物件,其中包含一個標籤和一個按鈕,它們之間由一個可拉伸的空間隔開。
hbox = wx.BoxSizer(wx.HORIZONTAL) l2 = wx.StaticText(p,label = "Label2", style = wx.ALIGN_CENTRE) hbox.Add(l2,0,wx.EXPAND) b3 = wx.Button(p,label = "Btn3") hbox.AddStretchSpacer(1) hbox.Add(b3,0,wx.ALIGN_LEFT,20) vbox.Add(hbox,1,wx.ALL|wx.EXPAND)
最後,垂直BoxSizer應用於wx.Panel物件。
以下是完整的程式碼:
import wx
class Example(wx.Frame):
def __init__(self, parent, title):
super(Example, self).__init__(parent, title = title, size = (200,300))
self.InitUI()
self.Centre()
self.Show()
def InitUI(self):
p = wx.Panel(self)
vbox = wx.wx.BoxSizer(wx.VERTICAL)
l1 = wx.StaticText(p,label = "Enter a number",style = wx.ALIGN_CENTRE )
vbox.Add(l1,0, wx.ALL|wx.EXPAND|wx.ALIGN_CENTER_HORIZONTAL, 20)
b1 = wx.Button(p, label = "Btn1")
vbox.Add(b1,0,wx.EXPAND)
b2 = wx.Button(p, label = "Btn2")
vbox.Add(b2,0,wx.ALIGN_CENTER_HORIZONTAL)
t = wx.TextCtrl(p)
vbox.Add(t,1,wx.EXPAND,10)
hbox = wx.BoxSizer(wx.HORIZONTAL)
l2 = wx.StaticText(p,label = "Label2", style = wx.ALIGN_CENTRE)
hbox.Add(l2,0,wx.EXPAND)
b3 = wx.Button(p,label = "Btn3")
hbox.AddStretchSpacer(1)
hbox.Add(b3,0,wx.ALIGN_LEFT,20)
vbox.Add(hbox,1,wx.ALL|wx.EXPAND)
p.SetSizer(vbox)
app = wx.App()
Example(None, title = 'BoxSizer demo')
app.MainLoop()
以上程式碼產生以下輸出: