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 | 縦の余白 |