こんにちは.これからwxPythonを使ってみる(6)について始めたいと思います.
対象や動作環境などのはじめに必要な情報はwxPythonを使ってみる(1) と同じになります.
また,今回の内容は前の5回の続きとなります.是非読んで見てください.
特徴
前回までは,BoxSizerについて説明しまいした.
今回から,GridSizerについて学びましょう.
GridSizerは,コンテナー領域を指定の行数,列数を分割し,順番にウィジェットを配置していくマス目状のレイアウトです.
コンストラクタ関数には行数と列数を渡します.1行目からアイテムを配置していき,1行目への配置が終わったら2行目へ.
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)は以上で終わります.
読んでいただいてありがとうございます.