前項で紹介した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のボタンのみ通常のサイズとなります。

