Tkinter(Python): ウィジェットの配置方法 3通り
Tkinterではボタンやラベルなどの部品のことを「ウィジェット」と言います。 そしてウィジェットを配置する方法は place()メソッド、pack()メソッド、grid()メソッドの3通りあって、 いずれかの方法で配置します。
各メソッドの特徴は次の通りです。
| メソッド | 概要 |
|---|---|
| place() | 自分で配置位置を具体的に指定して配置する |
| pack() | 横並びや縦並びに配置する |
| grid() | 電卓のボタンのようにグリッド状に配置する |
ここではButtonウィジェットを例に、 3通りの配置方法について解説します。
place()メソッドでウィジェットを配置
自分で配置する位置(X座標やY座標)を具体的に指定したい場合は、 place()メソッドを使います。
place()メソッドでボタンを3つ配置するサンプルプログラムは次の通りです。
import tkinter as tk
# ウィンドウ作成
root = tk.Tk()
# タイトル
root.title("テスト")
# ウィンドウサイズ
root.geometry("300x200")
# ボタン作成と配置
button1 = tk.Button(root, text="Button 1")
button1.place(x=10, y=20, width=100, height=50)
button2 = tk.Button(root, text="Button 2")
button2.place(x=10, y=100, width=120, height=50)
button3 = tk.Button(root, text="Button 3")
button3.place(x=180, y=100, width=70, height=50)
# メインループ
root.mainloop()
実行結果は次の通りです。

place()メソッドの引数
place()メソッドで指定できる引数は次の通りです。
| 引数 | 内容 |
|---|---|
| x | 左端の位置(ピクセル)、デフォルト 0 |
| y | 上端の位置(ピクセル)、デフォルト 0 |
| width | 幅 |
| height | 高さ |
| relx | 左端の相対位置(親に対して相対値0~1.0で指定) |
| rely | 上端の相対位置(親に対して相対値0~1.0で指定) |
| relwidth | 幅(親に対して相対値0~1.0で指定) |
| relheight | 高さ(親に対して相対値0~1.0で指定) |
上の表を見るとわかる通り、 絶対値と相対値の2通りの方法でウィジェットの位置やサイズを指定できます。 頭に「rel」が付くのが相対値で、付かないのが絶対値です。
pack()メソッドでウィジェットを配置
ウィジェットを縦並びや横並びで配置したい場合は pack()メソッドを使用します。
以下はpack()メソッドでボタンを縦並びに3つ配置するプログラムです。
ボタンの高さはテキスト単位での指定となります。
import tkinter as tk
# ウィンドウ作成
root = tk.Tk()
# ウィンドウサイズ
root.geometry("300x200")
# ボタン作成と配置
button1 = tk.Button(root, text="Button 1", height=2)
button1.pack()
button2 = tk.Button(root, text="Button 2", height=2)
button2.pack()
button3 = tk.Button(root, text="Button 3", height=2)
button3.pack()
# メインループ
root.mainloop()
実行結果

横並びに配置
横並びに配置する場合は、pack()メソッドの引数に 「side=tk.LEFT」を指定します。
import tkinter as tk
# ウィンドウ作成
root = tk.Tk()
# ウィンドウサイズ
root.geometry("300x200")
# ボタン作成と配置
button1 = tk.Button(root, text="Button 1", height=2)
button1.pack(side=tk.LEFT)
button2 = tk.Button(root, text="Button 2", height=2)
button2.pack(side=tk.LEFT)
button3 = tk.Button(root, text="Button 3", height=2)
button3.pack(side=tk.LEFT)
# メインループ
root.mainloop()
実行結果

grid()メソッドでウィジェットを配置
電卓のボタンのように、グリッド形式でウィジェットを配置したい場合は grid()メソッドを使います。
以下はgrid()メソッドでボタンを3つ配置するプログラムです。
grid()メソッドの引数で「row(行)」や「column(列)」を指定し、
どこに配置するかを決めます。
import tkinter as tk
# ウィンドウ作成
root = tk.Tk()
# ウィンドウサイズ
root.geometry("300x200")
# ボタン作成と配置
button1 = tk.Button(root, text="Button 1", height=2)
button1.grid(row=1, column=1)
button2 = tk.Button(root, text="Button 2", height=2)
button2.grid(row=2, column=2)
button3 = tk.Button(root, text="Button 3", height=2)
button3.grid(row=3, column=3)
# メインループ
root.mainloop()
実行結果

grid()メソッドの引数
grid()メソッドの引数は次の通りです。
| 引数 | 内容 |
|---|---|
| row | 行 |
| column | 列(カラム) |
| rowspan | 縦方向へのまたがり |
| columnspan | 横方向へのまたがり |
| padx | 横の余白 |
| pady | 縦の余白 |