GUIアプリケーションを開発する際、ウィジェットの配置やレイアウトは非常に重要な要素となります。
tkinterにおいて、これらの要素を制御する方法の一つが、pack
ジオメトリマネージャです。
この記事では、pack
ジオメトリマネージャの基本的な使い方や、そのパラメータについて詳しく解説します。
これにより、tkinterを使ったアプリケーション開発の際に、より柔軟かつ効果的なレイアウトを作成できるようになりますので、ぜひマスターしてください。
- packジオメトリマネージャの概要
- packジオメトリマネージャで使用できるパラメータ
- packを使ったGUIの実装方法とサンプルコード
tkinterとは
tkinterは、PythonでGUIアプリケーションを作成するための標準ライブラリです。簡潔で直感的なAPIを提供し、初学者でも容易にウィンドウアプリケーションを開発できます。
以下の記事で、tkinterを使った入力フォーム作成を例に詳しく解説していますので、あわせてご覧ください。
tkinterのジオメトリマネージャ packとは
tkinter
のpack
ジオメトリマネージャは、ウィジェットを親ウィジェット内に配置するためのツールです。side
パラメータでウィジェットの位置(上、下、左、右)を指定できます。fill
パラメータでウィジェットが親ウィジェットのどの方向に拡張するかを指定でき、x
、y
、またはboth
を選択可能です。expand
パラメータでウィジェットが親ウィジェットの残りのスペースを利用して拡張するかをブール値で設定します。anchor
パラメータでウィジェットのアンカーポイントを指定し、padx
とpady
でウィジェット周りのパディングを設定します。
これらのパラメータを組み合わせることで、様々なレイアウトと配置を柔軟に実現できます。
主要なパラメータとPythonコード
ここからは、packで使用可能なパラメータと、各パラメータのPythonコードでの実装補法について解説します。
side
ウィジェットを親ウィジェットのどの辺に配置するかを指定します。
- TOP: 上部
- BOTTOM: 下部
- LEFT: 左部
- RIGHT: 右部
import tkinter as tk
root = tk.Tk()
# 上部に配置
label_top = tk.Label(root, text="Top", bg="red")
label_top.pack(side="top")
# 下部に配置
label_bottom = tk.Label(root, text="Bottom", bg="blue")
label_bottom.pack(side="bottom")
# 左部に配置
label_left = tk.Label(root, text="Left", bg="green")
label_left.pack(side="left")
# 右部に配置
label_right = tk.Label(root, text="Right", bg="yellow")
label_right.pack(side="right")
root.mainloop()
fill
ウィジェットが親ウィジェットのどの方向に拡張するかを指定します。
- NONE: 拡張しない
- X: 横方向に拡張
- Y: 縦方向に拡張
- BOTH: 両方向に拡張
import tkinter as tk
root = tk.Tk()
# 横方向に拡張
label_x = tk.Label(root, text="Fill X", bg="red")
label_x.pack(fill="x")
# 縦方向に拡張
label_y = tk.Label(root, text="Fill Y", bg="blue")
label_y.pack(fill="y")
# 両方向に拡張
label_both = tk.Label(root, text="Fill BOTH", bg="green")
label_both.pack(fill="both")
# 拡張しない
label_none = tk.Label(root, text="Fill NONE", bg="yellow")
label_none.pack(fill="none")
root.mainloop()
expand
ウィジェットが親ウィジェットの残りのスペースを使って拡張するかどうかをブール値で指定します。
- 0 or False: 拡張しない
- 1 or True: 拡張する
import tkinter as tk
root = tk.Tk()
# 残りのスペースを使用して拡張
label_expand_true = tk.Label(root, text="Expand True", bg="red")
label_expand_true.pack(expand=True)
# 残りのスペースを使用して拡張しない
label_expand_false = tk.Label(root, text="Expand False", bg="blue")
label_expand_false.pack(expand=False)
root.mainloop()
anchor
ウィジェットが親ウィジェット内のどの位置に配置されるかを指定します。
- N, NE, E, SE, S, SW, W, NW, or CENTER
import tkinter as tk
root = tk.Tk()
# 親ウィジェットの上部に配置
label_n = tk.Label(root, text="Anchor N", bg="red")
label_n.pack(anchor="n")
# 親ウィジェットの下部に配置
label_s = tk.Label(root, text="Anchor S", bg="blue")
label_s.pack(anchor="s")
# 親ウィジェットの右部に配置
label_e = tk.Label(root, text="Anchor E", bg="green")
label_e.pack(anchor="e")
# 親ウィジェットの左部に配置
label_w = tk.Label(root, text="Anchor W", bg="yellow")
label_w.pack(anchor="w")
root.mainloop()
padx、pady
ウィジェットの周りの水平および垂直のパディングを指定します。
import tkinter as tk
root = tk.Tk()
# 水平方向のパディングを追加
label_padx = tk.Label(root, text="PadX", bg="red")
label_padx.pack(padx=20)
# 垂直方向のパディングを追加
label_pady = tk.Label(root, text="PadY", bg="blue")
label_pady.pack(pady=20)
# 水平方向と垂直方向のパディングを追加
label_padxy = tk.Label(root, text="PadX and PadY", bg="green")
label_padxy.pack(padx=20, pady=20)
root.mainloop()
Tkinterを効率よく学ぶには
TkinterでGUIを表示させるところまではできたけど、次は何を学べばいいのかな?
実際に業務でTkinterを使用するときに必要な知識を学んでおきたいなあ…
そんな時におすすめなのがUdemyのTkinter講座です。
Udemy(ユーデミー) は様々なスキルを動画で学べるオンライン動画学習プラットフォームです。
Webブラウザ、モバイルデバイス、タブレットなどでアクセスでき、オンライン時に動画をスマホなどの端末にダウンロードしておけばオフライン環境でも学習することが可能です。
おすすめのTkinter講座
Udemyで配信されている「0から始めるTkinterの使い方完全マスター講座〜Python×GUIの基礎・応用〜」の講座では、Tkinterの基本的な講座から始まり、具体例を用いたアプリ開発やGUIとデータベースの連携まで、Tkinterを使ったGUI開発の基礎を体系的に動画で学ぶことが可能です。
- Tkinterウィジェットの使い方、配置方法などGUI開発の基礎を体系的に学べる
- 翻訳アプリや音楽再生アプリなどの実例を通して実装方法を学べる
- データベースとの連携について学べる
ユーザーの評価
本講座は累計約2000名の方が受講されるベストセラー講座となっています。
- 「Pythonの標準モジュールのtkinterを使ってできることがいくつかわかった。特に翻訳アプリは実生活に非常に役にたっています。」(Mさん)
- 「実例を見ながらなのでとても分かりやすかった。」(Yさん)
- 「家計簿アプリでデータベースと連携する部分がとても参考になりました。」(Hさん)
\ Udemy公式サイトを見てみる! /
まとめ
本記事では、tkinter
のpack
ジオメトリマネージャを用いたウィジェットの配置とレイアウトについて学びました。
各パラメータ、side
、fill
、expand
、anchor
、padx
、およびpady
の使い方を理解し、それぞれのパラメータがどのように動作するかの具体的な例を見てきました。
これらの知識を活かすことで、自由度の高いインターフェースを構築できるようになりますので、ぜひ実践してみてください。
コメント