【Tkinter入門】レイアウト管理の基本!pack()の使い方をわかりやすく解説

【Tkinter入門】レイアウト管理の基本!pack()の使い方をわかりやすく解説

PythonでGUI(グラフィカルユーザーインターフェース)を作成する際に使われる「Tkinter」。その中でも、ウィジェット(部品)を画面に配置するための方法として最も基本的なものが「pack()」です。

この記事では、「【Tkinter入門】レイアウト管理の基本!pack()の使い方をわかりやすく解説」というタイトルの通り、初心者でも理解しやすく、子供から大人まで使える内容で、Tkinterのpack()について丁寧に解説します。

pack()とは?Tkinterにおけるレイアウト管理の基本

Tkinterでは、ウィジェット(ボタンやラベルなど)をウィンドウ上に表示するために「レイアウト管理」を行います。レイアウト管理には主に以下の3つの方法があります:

  • pack()
  • grid()
  • place()

その中で、もっともシンプルで直感的な方法がpack()です。

pack()は、ウィジェットを「順番に」上下または左右に並べて配置するレイアウト方法です。まずはこのpack()をしっかり理解することで、GUI作成の基礎をしっかりと身につけましょう。

Tkinterとpack()を使った基本的なコード

実際のコードを見てみましょう。以下のサンプルは、ウィンドウ内に3つのラベルをpack()で順番に表示するものです。

import tkinter as tk

root = tk.Tk()

label1 = tk.Label(root, text="ラベル1", bg="red")
label2 = tk.Label(root, text="ラベル2", bg="green")
label3 = tk.Label(root, text="ラベル3", bg="blue")

label1.pack()
label2.pack()
label3.pack()

root.mainloop()

このコードを実行すると、赤・緑・青のラベルが上から順に縦に並びます。これがpack()の基本的な動作です。

pack()の主なオプションを理解しよう

pack()はシンプルですが、さまざまなオプションを使うことで柔軟なレイアウトが可能になります。ここでは、よく使われるオプションを紹介します。

side

ウィジェットをどの方向に配置するかを指定します。

  • top(デフォルト)
  • bottom
  • left
  • right
label1.pack(side="left")
label2.pack(side="left")

このようにすると、ラベルが左から右へ横並びになります。

fill

ウィジェットが空いているスペースをどの方向に埋めるかを指定します。

  • x:横方向に広がる
  • y:縦方向に広がる
  • both:両方に広がる
label1.pack(fill="x")

expand

空いているスペースをウィジェットに割り当てるかどうかを指定します。

label1.pack(expand=True)

これを使うと、ウィジェットが余白を活用して中央寄せされたり、大きく表示されたりします。

padx, pady

ウィジェットの外側に余白を追加するためのオプションです。

label1.pack(padx=10, pady=5)

これにより、ウィジェットと周囲の間にスペースができます。

pack()でできるレイアウトのパターンを紹介

pack()を使えば、さまざまなパターンのレイアウトを作ることができます。

横並びにする

label1.pack(side="left")
label2.pack(side="left")
label3.pack(side="left")

画面全体に広げる

label1.pack(fill="both", expand=True)

上部に固定し、他を広げる

label1.pack(side="top")
label2.pack(fill="both", expand=True)

grid()やplace()との違いは?

Tkinterには他にもレイアウト方法があります。

grid()

格子状にウィジェットを配置できるレイアウトです。行と列を指定する必要があり、フォームのようなレイアウトに向いています。

place()

ウィジェットの位置をピクセル単位で指定できます。自由度は高いですが、画面サイズの変化に弱いです。

pack()はその中でも「手軽に使えて、シンプルなUIに向いている」という点で初心者に最適です。

pack()を使うときの注意点

  • pack()とgrid()は同じ親ウィジェット内で併用できません。どちらかに統一しましょう。
  • レイアウトが意図通りに表示されない場合は、sideやfillの設定を確認してみましょう。
  • ウィジェットが見えないときは、サイズが0になっている可能性があります。

まとめ

pack()は一見とてもシンプルですが、理解を深めると柔軟なレイアウトが可能になります。ウィジェットを順番に並べる、スペースを活かして表示する、中央寄せにするなど、初心者でも感覚的に使えるのが魅力です。

GUIプログラミングは最初こそ難しく感じるかもしれませんが、こうした基本を一つひとつ理解していけば、だんだんと思い通りの画面を作れるようになります。ぜひ、pack()の使い方をしっかりマスターして、PythonでのGUI開発を楽しんでください。