Wxpython-wx-gridbagsizer

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

wxPython-GridBagSizer

*GridBagSizer* は汎用性の高いサイザーです。 FlexiGridSizerよりも多くの拡張機能を提供します。 *子ウィジェット*は、グリッド内の特定のセルに追加できます。 さらに、子ウィジェットは、複数のセルを水平および/または垂直に占有できます。 したがって、同じ行にある静的テキストコントロールと複数行テキストコントロールは、異なる幅と高さを持つことができます。
  • グリッドバッグのレイアウト*は、位置、スパン、ギャップを決定することにより綿密に計画する必要があります。 wx.GridBagSizerクラスには、2つの引数を取るコンストラクタが1つしかありません。
Wx.GridBagSizer(vgap,hgap)

GridBagsizerクラスの最も重要なメソッドは、必須の引数として位置を取るAdd()です。 スパン、配置、境界フラグ、および境界サイズパラメータはオプションです。 明示的に使用されていない場合、デフォルト値が使用されます。

Wx.GridbagSizer().Add(control, pos, span, flags, border)

次の表は、GridBagSizerクラスのメソッドの一覧です-

S.N. Methods & Description
1

Add()

グリッド内の指定された位置に特定のコントロールを追加します

2

GetItemPosition()

グリッド内のコントロールの位置を返します

3

SetItemPosition()

グリッド内の指定された位置にコントロールを配置します

4

GetItemSpan()

アイテムの行/列のスパンを返します

5

SetItemSpan()

行/列の数にわたって指定されたアイテムにまたがる

次のコードは、テキストボックス(TexCtrl)に関連付けられたラベル(StaticText)があるフォームを表示します。 TextCtrlオブジェクトは、spanパラメーターを指定して追加されます。 したがって、テキストボックスの幅は複数の列にまたがっています。 名前のテキストボックスは2列にまたがっています。

tc = wx.TextCtrl(panel)
sizer.Add(tc, pos = (0, 1), span = (1, 2), flag = wx.EXPAND|wx.ALL, border = 5)

住所のテキストボックスは、3列にわたる複数行のテキストコントロールです。

tc1 = wx.TextCtrl(panel,style = wx.TE_MULTILINE)
sizer.Add(tc1, pos = (1,1), span = (1, 3), flag = wx.EXPAND|wx.ALL, border = 5)

説明用の複数行テキストコントロールを含む行は、フォームが引き伸ばされた場合に垂直方向に下に拡張するように拡張可能に設定されます。

tc4 = wx.TextCtrl(panel,style = wx.TE_MULTILINE)
sizer.Add(tc4, pos = (3,1), span = (1,3), flag = wx.EXPAND|wx.ALL, border = 5)
sizer.AddGrowableRow(3)

以下は完全なコードです-

import wx

class Example(wx.Frame):

   def __init__(self, parent, title):
      super(Example, self).__init__(parent, title = title)

      self.InitUI()
      self.Centre()
      self.Show()

   def InitUI(self):

      panel = wx.Panel(self)
      sizer = wx.GridBagSizer(0,0)

      text = wx.StaticText(panel, label = "Name:")
      sizer.Add(text, pos = (0, 0), flag = wx.ALL, border = 5)

      tc = wx.TextCtrl(panel)
      sizer.Add(tc, pos = (0, 1), span = (1, 2), flag = wx.EXPAND|wx.ALL, border = 5)

      text1 = wx.StaticText(panel, label = "address")
      sizer.Add(text1, pos = (1, 0), flag = wx.ALL, border = 5)

      tc1 = wx.TextCtrl(panel,style = wx.TE_MULTILINE)
      sizer.Add(tc1, pos = (1,1), span = (1, 3), flag = wx.EXPAND|wx.ALL, border = 5)

      text2 = wx.StaticText(panel,label = "age")
      sizer.Add(text2, pos = (2, 0), flag = wx.ALL, border = 5)

      tc2 = wx.TextCtrl(panel)
      sizer.Add(tc2, pos = (2,1), flag = wx.ALL, border = 5)

      text3 = wx.StaticText(panel,label = "Mob.No")
      sizer.Add(text3, pos = (2, 2), flag = wx.ALIGN_CENTER|wx.ALL, border = 5)

      tc3 = wx.TextCtrl(panel)
      sizer.Add(tc3, pos = (2,3),flag = wx.EXPAND|wx.ALL, border = 5)

      text4 = wx.StaticText(panel, label = "Description")
      sizer.Add(text4, pos = (3, 0), flag = wx.ALL, border = 5)

      tc4 = wx.TextCtrl(panel,style =  wx.TE_MULTILINE)
      sizer.Add(tc4, pos = (3,1), span = (1,3), flag = wx.EXPAND|wx.ALL, border = 5)
      sizer.AddGrowableRow(3)

      buttonOk = wx.Button(panel, label = "Ok")
      buttonClose = wx.Button(panel, label = "Close" )

      sizer.Add(buttonOk, pos = (4, 2),flag = wx.ALL, border = 5)
      sizer.Add(buttonClose, pos = (4, 3), flag = wx.ALL, border = 5)

      panel.SetSizerAndFit(sizer)

app = wx.App()
Example(None, title = 'GridBag Demo')
app.MainLoop()

上記のコードは、次の出力を生成します-

GridBagDemo出力