wxPython StaticBoxSizer佈局

StaticBoxSizer把一個盒子大小測定器到靜態框。它提供了圍繞框邊界連同在頂部的標籤。涉及準備statcboxsizer以下步驟 −

  • 創建一個wx.StaticBox對象。

  • 聲明一個wx.StaticBoxSizer與上面的靜態框作爲其參數。

  • 創建控件並添加到staticbox大小測定器。

  • 設置爲大小測定器的框架。

實例

在下面的例子中,兩個staticbox大小測定器被創建並添加到頂部垂直框大小測定器,它控制一個frame內部面板的佈局。

第一個staticbox大小測定器是圍繞一個名爲「Name」框。

nm = wx.StaticBox(panel, -1, 'Name:')
nmSizer = wx.StaticBoxSizer(nm, wx.VERTICAL)

橫向box大小測定器,持有兩個標籤和兩個文本框,加入到nmSizer靜態框中大小測定器。

nmbox = wx.BoxSizer(wx.HORIZONTAL)
fn = wx.StaticText(panel, -1, "First Name")
nmbox.Add(fn, 0, wx.ALL|wx.CENTER, 5)
nm1 = wx.TextCtrl(panel, -1, style = wx.ALIGN_LEFT)
nm2 = wx.TextCtrl(panel, -1, style = wx.ALIGN_LEFT)
ln = wx.StaticText(panel, -1, "Last Name")

nmbox.Add(nm1, 0, wx.ALL|wx.CENTER, 5)
nmbox.Add(ln, 0, wx.ALL|wx.CENTER, 5)
nmbox.Add(nm2, 0, wx.ALL|wx.CENTER, 5)

nmSizer.Add(nmbox, 0, wx.ALL|wx.CENTER, 10)

同樣,另一個 staticbox 大小測定器有一個名爲「Buttons」靜態框。

sbox = wx.StaticBox(panel, -1, 'buttons:')
sboxSizer = wx.StaticBoxSizer(sbox, wx.VERTICAL)

兩個按鈕的對象,命名爲 ‘ok’ 和 ‘cancel’ 都放在一個水平box大小測定器,這反過來,被放置在第二個staticbox大小測定器內。

hbox = wx.BoxSizer(wx.HORIZONTAL)
okButton = wx.Button(panel, -1, 'ok')

hbox.Add(okButton, 0, wx.ALL|wx.LEFT, 10)
cancelButton = wx.Button(panel, -1, 'cancel')

hbox.Add(cancelButton, 0, wx.ALL|wx.LEFT, 10)
sboxSizer.Add(hbox, 0, wx.ALL|wx.LEFT, 10)

兩個靜態框的大小測定器,‘name’ 和 ‘Buttons’ 被添加到一個垂直box大小測定器充當頂層框架佈局管理器。

panel = wx.Panel(self)
vbox = wx.BoxSizer(wx.VERTICAL)

vbox.Add(nmSizer,0, wx.ALL|wx.CENTER, 5)
vbox.Add(sboxSizer,0, wx.ALL|wx.CENTER, 5)
panel.SetSizer(vbox)

下面是完整的代碼 -

import wx

class Mywin(wx.Frame):
def __init__(self, parent, title):
super(Mywin, self).__init__(parent, title = title)

  panel = wx.Panel(self) 
  vbox = wx.BoxSizer(wx.VERTICAL) 
  nm = wx.StaticBox(panel, -1, 'Name:') 
  nmSizer = wx.StaticBoxSizer(nm, wx.VERTICAL) 

  nmbox = wx.BoxSizer(wx.HORIZONTAL) 
  fn = wx.StaticText(panel, -1, "First Name") 

  nmbox.Add(fn, 0, wx.ALL|wx.CENTER, 5) 
  nm1 = wx.TextCtrl(panel, -1, style = wx.ALIGN\_LEFT) 
  nm2 = wx.TextCtrl(panel, -1, style = wx.ALIGN\_LEFT) 
  ln = wx.StaticText(panel, -1, "Last Name") 

  nmbox.Add(nm1, 0, wx.ALL|wx.CENTER, 5)
  nmbox.Add(ln, 0, wx.ALL|wx.CENTER, 5) 
  nmbox.Add(nm2, 0, wx.ALL|wx.CENTER, 5) 
  nmSizer.Add(nmbox, 0, wx.ALL|wx.CENTER, 10)  

  sbox = wx.StaticBox(panel, -1, 'buttons:') 
  sboxSizer = wx.StaticBoxSizer(sbox, wx.VERTICAL) 

  hbox = wx.BoxSizer(wx.HORIZONTAL) 
  okButton = wx.Button(panel, -1, 'ok') 

  hbox.Add(okButton, 0, wx.ALL|wx.LEFT, 10) 
  cancelButton = wx.Button(panel, -1, 'cancel') 

  hbox.Add(cancelButton, 0, wx.ALL|wx.LEFT, 10) 
  sboxSizer.Add(hbox, 0, wx.ALL|wx.LEFT, 10) 
  vbox.Add(nmSizer,0, wx.ALL|wx.CENTER, 5) 
  vbox.Add(sboxSizer,0, wx.ALL|wx.CENTER, 5) 
  panel.SetSizer(vbox) 
  self.Centre() 

  panel.Fit() 
  self.Show()  

app = wx.App()
Mywin(None, 'Staticboxsizer Demo - www.yiibai.com')
app.MainLoop()

上面的代碼產生下面的輸出 -

wxPython