Python
python3
wxpython

wxPythonを使ってみる (6)

こんにちは.これからwxPythonを使ってみる(6)について始めたいと思います.
対象や動作環境などのはじめに必要な情報はwxPythonを使ってみる(1) と同じになります.
また,今回の内容は前の5回の続きとなります.是非読んで見てください.

特徴

前回までは,BoxSizerについて説明しまいした.
今回から,GridSizerについて学びましょう.

GridSizerは,コンテナー領域を指定の行数,列数を分割し,順番にウィジェットを配置していくマス目状のレイアウトです.

スクリーンショット 2018-07-04 11.57.19.png

コンストラクタ関数には行数と列数を渡します.1行目からアイテムを配置していき,1行目への配置が終わったら2行目へ.
window_display12.py は上の図のプログラムとなります.

window_display12.py
import wx

class CustomFrame(wx.Frame):
        def __init__(self,title):
            wx.Frame.__init__(self,None,-1,title,size=(400,400))

            panel = wx.Panel(self)

            layout = wx.GridSizer(2,2,0,0)
            layout.Add(wx.Button(panel,wx.ID_ANY,'B01'))
            layout.Add(wx.Button(panel,wx.ID_ANY,'B02'))
            layout.Add(wx.Button(panel,wx.ID_ANY,'B03'))
            layout.Add(wx.Button(panel,wx.ID_ANY,'B04'))

            panel.SetSizer(layout)

            self.Show()

app = wx.App(False)
CustomFrame('GridSizer')
app.MainLoop()

ここで注意すべきどこは,layout = wx.GridSizer(2,2,0,0)となります.wx.GridSizerコンストラクタ関数の引数は4つが必要です.
wx.GridSizer(行数を指定,列数を指定,縦の余白を指定,横の余白を指定)

このプログラムを書いたとき,wx.GridSizer(2,2)のように行数と列数のみを指定して書きましたが,下のようなエラーが吐き出されました.

layout = wx.GridSizer(2,2)
TypeError: GridSizer(): arguments did not match any overloaded call:
overload 1: not enough arguments
overload 2: argument 2 has unexpected type 'int'
overload 3: not enough arguments
overload 4: not enough arguments

このエラーを検索してみると
https://stackoverflow.com/questions/37502112/typeerror-gridsizer-arguments-did-not-match-any-overloaded-call
のサイトがあります.回答は下のように書かれています.

As you are running Python 3.4 I presume you are using wxPython Phoenix. According to the documentation of wx.GridSizer two int do not match any of the allowed signatures. Use e.g. three integers instead.

これをみて引数を3つにすると,エラーがなおりました.
また,wx.GridSizer(行数を指定,列数を指定,縦の余白を指定,横の余白を指定)の縦の余白を指定したくないときは,wx.GridSizer(2,2,hgap=2)で書けば,行列数と横の余白を指定することができます.

今回のwxPythonを使ってみる(6)は以上で終わります.
読んでいただいてありがとうございます.

「wxpythonを使ってみる」目次