
まくまく
人気のGUIライブラリwxPythonのレイアウトを学びましょう!Sizerの使い方がいまいちピンとこなかったのですが、一度やってみると思いのほかシンプルですね。
出力
今回作成したのはこちら。昨日の記事で作成したウインドウを利用しました。
テキストと画像の間にボタンを横並びで4つ表示させてます。ボタンにはイベントなどは設定していないので、押しても何も起こりません。
レイアウト的には、BoxSizerで
①テキスト
②horizontal_sizer(横並びのボタン)
③画像
上の①、②、③が縦に並んでいて、さらに②の中にもうひとつのsizerとなる「horizontal_sizer」を作成しています。
sizerの中にsizerなので、その名の通り入れ子になってます。
サンプルプログラム
#ライブラリのインポート
import wx
class MyFrame(wx.Frame):
def __init__(self, *args, **kw):
super(MyFrame, self).__init__(*args, **kw)
pnl = wx.Panel(self)
#テキストを作成
self.text1 = wx.StaticText(self, label="Sizerを入れ子にしてボタンを横並びにする")
self.button1=wx.Button(self, label="ボタン1",size=(60,60))
self.button2=wx.Button(self, label="ボタン2",size=(60,60))
self.button3=wx.Button(self, label="ボタン3",size=(60,60))
self.button4=wx.Button(self, label="ボタン4",size=(60,60))
#画像を読み込み
image = wx.Image('img1.jpg')
image = image.Scale(250,182, wx.IMAGE_QUALITY_HIGH)
self.bitmap = image.ConvertToBitmap()
self.bitmap2 = wx.StaticBitmap(self,-1, self.bitmap)
#Sizerを作成
sizer = wx.BoxSizer(orient=wx.VERTICAL)
horizontal_sizer = wx.BoxSizer(orient=wx.HORIZONTAL)
horizontal_sizer.Add(self.button1, 1)
horizontal_sizer.Add(self.button2, 1)
horizontal_sizer.Add(self.button3, 1)
horizontal_sizer.Add(self.button4, 1)
#テキストと画像をSizerに追加
sizer.Add(self.text1, 1)
sizer.Add(horizontal_sizer, 1)
sizer.Add(self.bitmap2, 1)
#sizerをセット
self.SetSizer(sizer)
if __name__ == '__main__':
app = wx.App()
frm = MyFrame(None, title='wxPythonのテスト')
frm.Show()
app.MainLoop()