※当サイトのリンクには広告が含まれています。

【PythonでGUIアプリ開発】tkinterのウィジェットの配置方法(pack、grid、place)を解説

Tkinter

tkinterでウィジェットを作成した後、配置しなければなりませんが、その方法は一つではありません。

今回はウィジェットの配置方法について解説したいと思います。

スポンサーリンク

pack

実装コード

import tkinter as tk

main_win = tk.Tk()
main_win.title("テスト用ウィンドウ")
main_win.geometry("400x300")

text1 = tk.Label(main_win, text="テスト1", bg='yellow')
text2 = tk.Label(main_win, text="テスト2", bg='pink')
text1.pack()
text2.pack(fill="x")

main_win.mainloop()

実行結果

解説

packはウィジェットを一次元的に配置する場合によく使用されます。

packのオプション

packのオプションで使用頻度が高いものを抜粋してみました。

fillx横方向に拡大する
y縦方向に拡大する
both横・縦両方に拡大する
sideleft左詰めにする
right右詰めにする
top上詰めにする
bottom下詰めにする
padx外側の横の隙間を指定する
pady外側の縦の隙間を指定する
ipadx内側の横の隙間を指定する
ipady内側の縦の隙間を指定する

スポンサーリンク

grid

実装コード

import tkinter as tk

main_win = tk.Tk()
main_win.title("テスト用ウィンドウ")
main_win.geometry("400x300")

text1 = tk.Label(main_win, text="テスト1", bg='yellow')
text2 = tk.Label(main_win, text="テスト2", bg='pink')
text3 = tk.Label(main_win, text="テスト3", bg='blue')
text4 = tk.Label(main_win, text="テスト4", bg='green')
text1.grid(column=0, row=0)
text2.grid(column=0, row=1)
text3.grid(column=1, row=0)
text4.grid(column=1, row=1)

main_win.mainloop()

実行結果

解説

ウィジェットを2次元的に配置する時によく使用されるのがgridです。

左上を原点(0,0)として、列をcolumnで行をrowで指定して配置します。

スポンサーリンク

place

実装コード

import tkinter as tk

main_win = tk.Tk()
main_win.title("テスト用ウィンドウ")
main_win.geometry("400x300")

text1 = tk.Label(main_win, text="テスト1", bg='yellow')
text2 = tk.Label(main_win, text="テスト2", bg='pink')
text1.place(x=10, y=20, width=80, height=50)
text2.place(relx=0.1, rely=0.2, relwidth=0.5, relheight=0.5)

main_win.mainloop()

実行結果

解説

ウィジェットの位置を座標指定して配置するのがplaceです。

ウィジェットの位置を細かく調整したい場合などに使用すると便利です。

placeのオプション

placeでウィジェットを配置する時のオプションは以下の通りです。

x配置するウィジェットのx座標
y配置するウィジェットのy座標
widthウィジェットの幅の指定
heightウィジェットの高さの指定
relx配置先に対して相対的なウィジェットのx座標(0.0~1.0)
rely配置先に対して相対的なウィジェットのy座標(0.0~1.0)
relwidth配置先に対して相対的なウィジェットの幅の指定(0.0~1.0)
relheight配置先に対して相対的なウィジェットの高さの指定(0.0~1.0)

relが付くオプションは相対的な指定になります。
1.0を100%とするので、0.5であれば50%の位置、あるいは幅・高さということになります。

relが付くオプションで指定されたウィジェットは、マスターウィンドウのサイズ変更に追従し大きさが変化します。
ウィンドウが大きくなった場合に、ウィジェットも大きくさせたい場合はrelが付くオプションの方を使うと便利でしょう。

例として、上記の実行結果で表示されたウィンドウのサイズを変更したものが下です。
ソースコードの変更はしていません。

Tkinter
スポンサーリンク
toniemonをフォローする

コメント