GUIライブラリ wxPythoでのレイアウト Sizerを入れ子にしてボタンを横並びで表示する方法

まくまく
まくまく
人気の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()

タイトルとURLをコピーしました