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()メソッドの引数

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() 縦並び

横並びに配置

横並びに配置する場合は、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()

実行結果

pack() 横並び

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()メソッドの引数

grid()メソッドの引数は次の通りです。

引数内容
row
column列(カラム)
rowspan縦方向へのまたがり
columnspan横方向へのまたがり
padx横の余白
pady縦の余白
Python