Wxpython-wx-staticboxsizer

提供:Dev Guides
移動先:案内検索

wxPython-StaticBoxSizer

StaticBoxSizerは、ボックスサイザーを静的ボックスに配置します。 上部にラベルとともにボックスの周りに境界線を提供します。 statcboxsizerの準備には次の手順が含まれます-

  • wx.StaticBoxオブジェクトを作成します。
  • 上記の静的ボックスを引数としてwx.StaticBoxSizerを宣言します。
  • コントロールを作成し、staticboxサイザーに追加します。
  • フレームのサイザーとして設定します。

次の例では、2つのstaticboxサイザーが作成され、上部の垂直ボックスサイザーに追加され、フレーム内のパネルのレイアウトを制御します。

最初の静的ボックスサイザーは、「名前」という名前の静的ボックスの周りに作成されます。

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

2つのラベルと2つのテキストボックスを保持する水平ボックスサイザーが、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」という名前の2つのボタンオブジェクトは、水平のボックスサイザーに配置され、2番目の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)

2つの静的ボックスサイザー、「名前」と「ボタン」が、トップレベルフレームのパネルのレイアウトマネージャーとして機能する垂直ボックスサイザーに追加されます。

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出力