前項で紹介したGridSizerをより柔軟な形にしたのが、FlexGridSizerとなります。GridSizerは配置領域が全て同じサイズとなってしまうのに対し、FlexGridSizerでは行指定、列指定でサイズの変更が可能です。もちろん全てが同じサイズの方が都合の良い場合もあるので、用途によって使い分けましょう。配置領域等の使い方は同じなので、詳細はGridSizerをご確認ください。本項では相違点のみ解説します。
サイズの変更指定
23行目AddGrowableRowの引数にサイズを変更したい行インデックスを指定しています。24行目のAddGrowableColでは列を指定しています。
import wx application = wx.App() frame = wx.Frame(None, wx.ID_ANY, 'テストフレーム', size=(300, 300)) panel = wx.Panel(frame, wx.ID_ANY) panel.SetBackgroundColour('#AFAFAF') button_1 = wx.Button(panel, wx.ID_ANY, '1') button_2 = wx.Button(panel, wx.ID_ANY, '2') button_3 = wx.Button(panel, wx.ID_ANY, '3') button_4 = wx.Button(panel, wx.ID_ANY, '4') button_5 = wx.Button(panel, wx.ID_ANY, '5') button_6 = wx.Button(panel, wx.ID_ANY, '6') layout = wx.FlexGridSizer(rows=3, cols=2, gap=(0, 0)) layout.Add(button_1, flag=wx.GROW) layout.Add(button_2, flag=wx.GROW) layout.Add(button_3, flag=wx.GROW) layout.Add(button_4, flag=wx.GROW) layout.Add(button_5, flag=wx.GROW) layout.Add(button_6, flag=wx.GROW) layout.AddGrowableRow(0) layout.AddGrowableCol(1) panel.SetSizer(layout) frame.Show() application.MainLoop()
1行目と2列目をサイズ変更するように指定しました。このサンプルでは3と5のボタンのみ通常のサイズとなります。