05 wxPython StaticBoxSizer


StaticBoxSizer将box sizer放入静态框中。它提供了盒子周围的边框以及顶部的标签。以下步骤涉及准备statcboxsizer -

  • 创建一个wx.StaticBox对象。
  • 使用上面的静态框作为参数声明一个wx.StaticBoxSizer。
  • 创建控件并添加staticbox sizer。
  • 将其设置为框架的sizer。

在以下示例中,将创建两个静态框大小调整器并将其添加到顶部垂直框大小调整器中,该大小调整器控制框架内面板的布局。

第一个静态框大小调整器是围绕名为“名称”的静态框创建的。

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

一个水平框大小调整器,包含两个标签和两个文本框,添加到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 sizer包含一个名为'Buttons'的静态框。

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

名为“ok”和“cancel”的两个按钮对象放在一个水平框大小调整器中,然后放在第二个静态框大小调整器内。

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)

两个静态框大小调整器,“名称”和“按钮”被添加到垂直框大小调整器中,充当顶层框架中面板的布局管理器。

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')
app.MainLoop()

上面的代码产生以下输出

StaticBoxSizer输出