【Python/tkinter】Widgetの配置(grid)

tkinter Widget配置 grid
スポンサーリンク
スポンサーリンク

PythonでGUIアプリを作成できるモジュール tkinter(ティーキンター)で Widget(ウィジェット) を配置する grid について解説します。

本記事での Widget の定義には Frame も含みます。

サンプルコードはモジュールのインポートを from tkinter import * としています。
関数を呼び出す際にパッケージ名の接頭辞 (tk.Frame()tk.)を省略できるのでおすすめです。

スポンサーリンク

grid とは

grid は Widgetを配置するメソッドで、ウィンドウの中にグリッド状(格子状)にレイアウトすることができます。
エクセルのセルを利用して表を作るイメージで、セルを結合するような設定や、grid で配置した Frame の中に、Widget を grid で配置することもできます。

gridとは


grid のオプション一覧

grid で指定可能なオプション一覧です。

オプション説明値の形式
rowWidgetを配置する縦方向の位置行番号(0始まり)
columnWidgetを配置する横方向の位置列番号(0始まり)
columnspan横方向に結合する数整数(2以上)
rowspan縦方向に結合する数整数(2以上)
stickyグリッド内に配置する位置

上下左右=北南西東として頭文字の記号で指定
(上=N, 下=S,  右=E, 左=W)
デフォルトは中央に配置(CENTER)

Frameを結合する場合は指定が必要
(基本)N, S, W, E
(組合せ)NW, NE, SW, SE, NSEW 
     またはN+Sなど
ipadx内側・横方向のスペースピクセル値
ipady内側・縦方向のスペースピクセル値
padx外側・横方向のスペースピクセル値
pady外側・縦方向のスペースピクセル値
in_親Widgetを指定Widgetオブジェクト名

横・縦位置(row, column)

格子状の横位置、縦位置を row, column で指定します。

位置の数字は0始まりで、左上が原点(0,0)になります。

横・縦位置(row, column)


横・縦方向の結合(columnspan, rowspan)

columnspan, rowspan を指定することでグリッドを結合する事ができます。

下の例では、「ラベル1」を縦方向に2個分、「ラベル4」を横方向に2個分結合しています。
sticky=N+S または E+W を同時に指定する事で、隣接する Widget の幅・高さまで要素を引き伸ばすことが出来ます。


Frame を結合したい場合は、後述sticky=EW または NSを指定して下さい。指定しないと正常に結合されません。

グリッド内に配置する位置(sticky)

グリッド内に配置する位置を指定することができます。

上下左右=北南西東として頭文字の記号の組み合わせで指定します。
値は、上=N, 下=S,  右=E, 左=W となります。

記号と位置関係は下図のようになります。

sticky記号と位置


注)Frame を columnspan, rowspan で結合配置する場合は sticky=EW または NS の指定が必要です。
指定しないと Frame が結合されません。

分かりやすいようにFrameの外側を枠線で表しています。


内部のスペースを追加(ipadx, ipady)

ipadx, ipady で Widget 内部のスペース(パディング)を設定できます。

横方向のスペースは ipadx, 縦方向のスペースは ipady で指定します。

内部のスペースを追加(ipadx, ipady)


外側のスペースを追加(padx, pady)

padx, pady で Widgetの外側のスペース(パディング)を設定できます。

横方向のスペースは padx, 縦方向のスペースは pady で指定します。


親Widgetの指定(in_)

基本はWidgetの設定で配置する親Widgetを指定しますが、in_ を使用することで、grid() 内で指定することが出来ます。


Frame のサイズを固定(grid_propagate)

Frame を grid で配置すると、デフォルトでは他のWidgetに合わせてサイズが自動で伸縮します。
サイズを固定したい場合は、grid_propagate(False) を指定することでサイズを固定できます。
・関連記事:【Python/tkinter】Frameの使い方

分かりやすいようにFrameの外側を枠線で表しています。

フレームサイズ固定



tkinter grid の使い方を解説しました。

以下の記事も参考にしてみて下さい。
・関連記事:PythonでGUIアプリを作成する(tkinter)
・関連記事:【Python/tkinter】Frameの使い方
・関連記事:【Python/tkinter】Widgetの配置(pack)
・関連記事:【Python/tkinter】Widgetの配置(place)