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

tkinter packの使い方
スポンサーリンク
スポンサーリンク

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

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

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

スポンサーリンク

pack とは

pack は Widget をウィンドウの中に縦または横に並べて配置する時に使用します。

簡単なサンプルを記載します。


pack のオプション一覧

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

オプション説明値の形式
sideWidgetを配置する方向を指定(上下左右)
デフォルトはTOP
TOP, BOTTOM, LEFT, RIGHT
anchorsideで配置された後の配置位置(寄せる方向)を指定
デフォルトはCENTER
(基本)CENTER, N, S, W, E
(組合せ)NW, NE, SW, SE
expandWidgetを残りのスペースを埋めるかを指定
デフォルトはFalse
True, False
fillWidgetを縦・横または両方向に引き伸ばすX, Y, BOTH, NONE
before配置済みのWidgetの前にWidgetを配置Widget名
after配置済みのWidgetの後にWidgetを配置Widget名
ipadx内側・横方向のスペースピクセル値
ipady内側・縦方向のスペースピクセル値
padx外側・横方向のスペースピクセル値
pady外側・縦方向のスペースピクセル値
in_親Widgetを指定Widgetオブジェクト名

配置方向を指定(side)

ウィジェットの上下左右の配置方向を指定します。

値は、上=TOP, 下=BOTTOM, 左=LEFT, 右=RIGHT になります。

左詰めで配置する例です。


side の指定順序によって配置位置が変わってくるため注意が必要です。
以下の例ではLEFT→TOP→RIGHT→BOTTOMの順に配置していますが、それぞれ中心位置からずれてしまいます。

これは pack が専有領域を持っていて、その領域を避けて配置することで発生します。
それぞれの専有領域を図示すると下図のようになります。

各ボタンを画面の中心に配置したい場合は、以下の順序で配置します。

専有領域を図示すると以下のようになっています。

配置の基準位置を指定(anchor)

side で配置した後の領域内での基準位置を指定します。

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

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

anchor では下図のように pack で専有している領域内で寄せられます。

残りのスペースを埋める(expand)

expand=Trueとした時に、残っている領域全てを占有領域とします。

以下の例ではボタン2の領域以外を、ボタン1の領域として専有します。

領域を図示すると下図のようになります。


2個以上の Widgetに expand=True を指定すると、均等割付になります。

領域を図示します。

Widgetを引き伸ばす(fill)

Widget を領域内いっぱいまで、縦・横または両方向に引き伸ばします。

値は、横=X、縦=Y、両方向=BOTH で縦横両方向に引き伸ばします。

配置済みのWidgetの前後に配置(before, after)

既に配置済のWidgetの前後にWidgetを配置します。

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

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

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

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

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

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


親Widgetの指定(in_)

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


Frame のサイズを固定(propagate)

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

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



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

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