WIDGET LIST

tkinterウィジェット一覧と、実例アプリ対応表

tkinterにどんな部品があるのかを、用途別の表で一気に見渡せるようにしました。各部品には「その部品を実際に使っている当サイトのアプリ記事」を添えてあるので、一覧を見たあとすぐ動くコードに進めます。

🎯 対象: tkinterで何か作りたい初心者〜初級者 ⏱️ 読了: 約15分 🧩 収録: tk本体18種+ttk専用6種

1. 結論:部品は「入力・表示・入れ物」の3つで考える

tkinter を触り始めると LabelEntryTreeview といった名前が脈絡なく出てきて、全体像がつかめないまま手が止まります。公式ドキュメントは正確ですが辞書的で、「作りたい画面にどれを使うか」という順番では書かれていないからです。覚え方はシンプルで、ウィジェット(画面の部品)は役割で3つに分けられます。

部品選びの3原則

①ユーザーから何かを受け取る部品(入力系)②こちらから見せる部品(表示系)③それらをまとめて並べる入れ物(コンテナ系)。作りたい画面を紙に描き、各パーツをこの3つに割り振れば、使う部品はほぼ決まります。

数も多くありません。手元の Python 3.12.10(Tk 8.6)と Python 3.14.7(Tk 9.0)で tkinter が公開しているウィジェットクラスを数えました。どちらも18種類です(ウィンドウを作る TkToplevel と基底クラスを除く)。これに tkinter.ttk の新規6種類を足した24種類が、標準の Python だけで使える部品のほぼすべてです。

ℹ️
この記事の対応表の作り方

各表の「使用本数」と「実例記事」は、当サイトの GUI アプリ178本(初心者向け中級者向け)のソースコードを tk.〇〇( / ttk.〇〇( などのパターンで機械的に検索して作りました(2026-09-20 時点で公開中の分が対象で、以後に追加した記事は含みません。同じ記事内の重複は1本として集計)。ヒット0件の部品は「実例なし」とそのまま書いてあります。

2. tk と ttk の違い、どちらを使うか

tkinter には tk.Buttonttk.Button のように、同じ名前の部品が2系統あります。違いは2点です。

  • 見た目ttk(themed tk)は OS のテーマに合わせた外観。古くからある tk 系はどの OS でも同じ素朴な見た目です。
  • 色の指定方法tk 系は bg="red" と部品へ直接書けますが、ttk 系は受け付けず ttk.Style で定義します。

公式ドキュメントによると、ttk が提供するのは18ウィジェットです。うち12個は tkinter 本体にも同名のものがあります(Button・Checkbutton・Entry・Frame・Label・LabelFrame・Menubutton・PanedWindow・Radiobutton・Scale・Scrollbar・Spinbox)。残る6個(Combobox・Notebook・Progressbar・Separator・Sizegrip・Treeview)が ttk だけの新顔です。では実際にどちらが使われているのか、178本のソースを数えました。

部品ttk 版を使う記事tk 版を使う記事
Button162本57本
Entry108本5本
Scrollbar107本0本
Spinbox38本0本
Scale14本1本
Frame1本175本
Label20本178本

(この表だけ両方使う記事を双方に計上。§3以降の「使用本数」は実数です)。Frame と Label で tk 系が多いのは初期のアプリが背景色を直接指定していた名残で、今から書くなら ttk で構いません。

判断は「ttk にあるものは ttk を使い、ttk に無いものだけ tk を使う」で足ります。相当品が無いのは TextCanvasListboxMenuMessageToplevel の6つだけです。インポートは次の2行が定番です。

import tkinter as tk
from tkinter import ttk

ただし tk 系が劣るわけではなく、背景色を1行で変えたい学習用サンプルでは tk.Button(root, bg="#4a90d9") の手軽さが勝ちます。

3. 入力を受け取る部品(10種)

ユーザーの操作や入力を受け取る部品です。最小コードは root というウィンドウがある前提の1行で、実際には後ろに .pack() などの配置が要ります(§9)。

部品何をする部品か最小コード使用本数サイト内の実例
Entry1行のテキスト入力欄ttk.Entry(root, width=20)110本BMI計算ログインフォーム
Text複数行のテキスト入力・表示tk.Text(root, height=10)88本テキストエディタ文字数カウンター
Button押すと関数を実行するttk.Button(root, text="実行", command=run)174本最初のウィンドウ電卓
Checkbuttonオン/オフの切り替えttk.Checkbutton(root, text="含める", variable=flag)39本アンケートフォーム習慣トラッカー
Radiobutton複数から1つだけ選ぶttk.Radiobutton(root, text="A", value="a", variable=v)22本クイズアプリ進数変換
Scaleつまみを動かして数値を決めるttk.Scale(root, from_=0, to=100, variable=v)15本お絵描きアプリカラーピッカー
Spinbox矢印で数値を増減させるttk.Spinbox(root, from_=1, to=99, textvariable=v)38本年齢計算パスワード生成
Listbox一覧から項目を選ぶtk.Listbox(root, height=8)26本ToDoリスト音楽プレイヤー
OptionMenuボタン型のプルダウン選択ttk.OptionMenu(root, var, "既定値", *items)1本重さ単位変換(ttk版)
Menubutton押すとメニューが開くボタンttk.Menubutton(root, text="表示")0本実例なし(§5の Menu で代用)

まず押さえるのは1行なら Entry・複数行なら Text という分岐です。選択系は「候補が3つ以内なら Radiobutton、多いなら Combobox(§6)か Listbox」が目安。OptionMenu が178本中1本しか出てこないのは、同じ用途を ttk.Combobox が70本で担っているためで、機能不足だからではありません。

4. 情報を見せる部品(4種)

部品何をする部品か最小コード使用本数サイト内の実例
Label文字や画像を表示するttk.Label(root, text="こんにちは")178本最初のウィンドウカウントダウンタイマー
Canvas図形・線・画像を自由に描くtk.Canvas(root, width=400, height=300)46本スネークゲーム迷路ゲームデジタル時計
Scrollbar他の部品をスクロールさせるttk.Scrollbar(root, command=listbox.yview)107本気分トラッカーストップウォッチ
Message長文を自動で折り返して表示tk.Message(root, text="長い説明文")0本実例なし(Label の wraplength で代用)

Label が178本すべてで使われているのは、タイトル・結果表示・ステータス行のどれかがほぼ必ず要るからです。最初に覚える部品はこれで間違いありません。

Canvas は「部品を並べる」発想から外れていて、座標を指定して長方形や線を描きます。ゲームやお絵描き、グラフの自作はここが主戦場です。描いた図形には ID が返るので coords() で動かし delete() で消せます。スネークゲームの蛇が動くのも、四角形を消して描き直しているだけです。

Scrollbar は単体では何もしません。command に相手の yview を渡し、相手側にも yscrollcommand を渡す相互接続が必要で、片方だけだと「つまみは動くが中身が動かない」状態になります。複数行テキストに付けるだけなら tkinter.scrolledtextScrolledText が2行で済みます(当サイトの採用はフィボナッチ数列ビューアーの1本のみ)。

5. 入れ物とメニューの部品(4種+Toplevel)

部品何をする部品か最小コード使用本数サイト内の実例
Frame部品をまとめる透明な箱ttk.Frame(root, padding=10)175本じゃんけんゲームワードカウンター
LabelFrame見出し付きの枠で囲むttk.LabelFrame(root, text="入力")102本BMI計算天気予報アプリ
PanedWindow境界をドラッグできる左右分割ttk.PanedWindow(root, orient="horizontal")42本ファイルマネージャーフォントビューアー
Menuウィンドウ上部のメニューバーtk.Menu(root)6本マルチタブエディタカンバンボード
Toplevel2枚目以降の独立したウィンドウtk.Toplevel(root)18本ポモドーロタイマーレシピ管理

いちばん取りこぼしやすいのが Frame です。178本中175本が使っているのに、入門記事では省略されがちな部品でもあります。画面が複雑になると「上段は横並び、下段は格子」と配置ルールが混在しますが、Frame で区画を分ければ区画ごとに別の配置方法を使えます(§9の混在エラー対策も兼ねます)。

Menu が6本と少ないのは、小さな道具なら画面上のボタンで足りるからです。Toplevel は設定画面などを別ウィンドウで開くときに使いますが、2枚目を tk.Tk() で作らないことTk() はアプリに1つだけです。

6. ttk にしかない6種

ここからが ttk の本体価値です。tkinter 本体には存在せず、ttk をインポートして初めて使えるようになる6つです。

部品何をする部品か最小コード使用本数サイト内の実例
Comboboxプルダウンから選ぶ(入力も可)ttk.Combobox(root, values=["A","B"])70本温度変換通貨換算
Treeview表・階層リストを表示するttk.Treeview(root, columns=("a","b"))66本家計簿アプリ連絡先帳家計簿ダッシュボード
Progressbar進捗を帯で見せるttk.Progressbar(root, maximum=100, value=30)26本クイズタイマーネットワークスキャナー
Notebook詰め込んだ画面をタブで整理ttk.Notebook(root)20本日々のプランナーレシピ管理
Separator区切り線を引くttk.Separator(root, orient="horizontal")2本多言語翻訳ツール為替レートウィジェット
Sizegrip右下のリサイズ用つまみttk.Sizegrip(root)0本実例なし(枠のドラッグで代用できるため)

Treeview で表を作る

Treeview は tkinter で表を作るときの標準解です。columns で列を定義し、heading() で列見出し、insert() で1行ずつ追加します。セルを直接編集する機能は無いので、編集は入力欄を別に置くかダブルクリックで小窓を出す作りにします。

7. ダイアログはウィジェットではない

messageboxfiledialog はウィジェット一覧で一緒に紹介されがちですが、性質が違います。画面に置く部品ではなく、呼ぶと小窓が出て、閉じると結果を返す関数です。配置は不要で、戻り値をそのまま使います。

モジュール用途戻り値使用本数サイト内の実例
messagebox確認・警告・エラーの表示True/False または "ok"144本フラッシュカード数当てゲーム
filedialogファイル・フォルダの選択パスの文字列(未選択は空文字)67本テキストエディタ画像ビューアー
colorchooser色の選択((R,G,B), "#rrggbb")4本お絵描きアプリカラーテーマ生成
simpledialog文字列・数値の入力を1つ求める入力値(キャンセルは None3本時間割ビューアーカンバンボード

インポートは from tkinter import messagebox, filedialog のように明示します。import tkinter as tk だけでは tk.messagebox は使えません。また filedialog はキャンセル時に空文字を返すため if not path: return が必要で、simpledialog は None を返すので is None で判定します。

8. 値を持つのは部品ではなく「変数クラス」

入力欄の値を扱う方法は、entry.get() で都度読む方法と、変数クラスを部品に結びつける方法の2通り。178本中131本が StringVar を使っており、後者が主流です。種類は4つで、StringVar(文字列・Label や Entry)、IntVar(整数・Radiobutton や Spinbox)、DoubleVar(小数・Scale)、BooleanVar(真偽値・Checkbutton)を使い分けます。

msg = tk.StringVar(value="待機中")
tk.Label(root, textvariable=msg).pack()
msg.set("計算しました")   # ラベルの表示が自動で切り替わる

利点は、表示の更新を「変数に代入する」だけで書けることです。label.config(text=...) を呼んで回る必要がなくなり、同じ値を複数の部品へ映すのも簡単になります。カウントダウンタイマーのように毎秒表示が変わるアプリでは、読みやすさに差が出ます。なお変数クラスは tk.Tk() の後でないと作れません。

9. pack・grid・place の違いと使い分け

部品は作っただけでは画面に出ず、配置マネージャを呼んで初めて表示されます。選択肢は3つです。

方法考え方向いている画面使用本数実例
pack()上から(または左から)順に詰める縦1列・横1行が中心の画面177本最初のウィンドウ
grid()行と列のマス目に置く入力フォーム・ボタンの格子84本電卓
place()座標で直接指定する重ね置き・自由配置6本デスクトップ付箋CSVビューア

採用率がそのまま推奨順です。基本は pack、フォームや電卓のような格子は grid、place は特殊な用途だけ。place が6本にとどまるのは、ウィンドウサイズを変えると座標指定が追従できず崩れるからです。

崩れ方の定番は「ウィンドウを広げても部品が左上に寄ったまま」で、pack なら fill="both", expand=True、grid なら sticky="nsew"root.columnconfigure(0, weight=1) で追従します。もう1つの定番が次章の混在エラーです。

10. つまずきやすい5点(実際のエラーメッセージつき)

以下は Python 3.12.10(Tk 8.6)と Python 3.14.7(Tk 9.0)で実際に動かして確認した結果です。

10-1. pack と grid を同じ親で混ぜる

同じ Frame の中で pack と grid を併用すると、Tk 8.6 では TclError: cannot use geometry manager grid inside .!frame which already has slaves managed by pack、Tk 9.0 では cannot use geometry manager "grid" inside ".!frame": pack is already managing its content windows というエラーになります(文言はバージョンで異なります)。解決策は、混ぜたい区画ごとに Frame を分けることです。親が違えば別の配置方法を使えます。

10-2. ttk の部品に bg や fg を指定する

ttk.Button(root, text="x", bg="red")TclError: unknown option "-bg" で失敗します。見た目を変えるなら ttk.Style() を使うか、その部品だけ tk.Button にします。178本中21本が ttk.Style を使っているのは、この制約への対応です。

10-3. 変数に代入したつもりが None になる

label = tk.Label(root, text="x").pack() と書くと labelNone になります(pack() の戻り値が None のため)。後でその部品を操作するなら、生成と配置を2行に分けてください。AttributeError: 'NoneType' object has no attribute 'config' の典型的な原因です。

10-4. Text の中身を取ると改行が1つ多い

text.get("1.0", "end") は末尾に改行が付きます('abc' を入れた直後でも 'abc\n' が返ります)。文字数カウントで1文字ずれる原因になるので、text.get("1.0", "end-1c") と書きます。

10-5. Entry の値は常に文字列

entry.get()"12" のような文字列を返します。そのまま足すと文字列連結になるため、数値として使うなら int()float() に変換し、数字以外が入力された場合に備えて try / except ValueError で囲みます。エラーの読み方はPythonのよくあるエラー一覧へ。

11. よくある質問(FAQ)

Q. tkinter のインストールは必要ですか?

公式サイトから入れた Windows・macOS 版の Python なら標準で付属しており、追加インストールは不要です。python -m tkinter で確認用の小さなウィンドウが出れば使えます。Linux では別パッケージ(Debian 系なら python3-tk)が必要な場合があります。環境構築はPythonインストール手順へ。

Q. ウィジェットは全部で何種類ですか?

手元の Python 3.12.10 と 3.14.7 で数えると、tkinter 本体が18種類(Tk・Toplevel・基底クラスを除く)、ttk が18種類でうち6種類が ttk 固有、重複を除くと24種類です。記事ごとに「19種類」などと表記が揺れるのは、Toplevel やダイアログを数に含めるかどうかの違いです。

Q. tk と ttk はどちらを使えばよいですか?

同名の部品があるなら ttk が基本で、ttk に無い Text・Canvas・Listbox・Menu・Message・Toplevel だけ tk 系を使います。ただし色を直接指定したい学習用コードでは tk 系の手軽さが勝ちます。

Q. 表形式のデータを表示する部品はありますか?

ttk.Treeview が該当します。178本中66本が使用しており、家計簿アプリが最小構成の例です。セルを直接編集する機能は無いので、編集は別の入力欄やダイアログで受け取ります。

Q. この一覧の部品だけで実用的なアプリは作れますか?

作れます。当サイトの178本は標準ライブラリの tkinter を中心に組み立てたもので、画像処理やグラフなど専門分野に踏み込むときだけ Pillow や matplotlib を足しています。どのライブラリが何に使えるかはPythonライブラリ一覧を参照してください。

本記事は、生成AIを活用して下書きし、運営者が内容を確認・編集したうえで公開しています。AIの利用方針は免責事項をご覧ください。

12. まとめ:次に読むもの

覚えるべきは3点です。

  • 部品は入力・表示・入れ物の3分類。画面の各パーツを当てはめれば使う部品は決まる
  • ttk にあるものは ttk。無いのは Text ほか §2 の6つだけ
  • 配置は pack が基本、格子は grid。同じ親で混ぜるとエラーなので Frame で区画を分ける

一覧を眺めるより、気になった部品を1つ選んで動かすほうが早く身につきます。決まらない場合は初心者向けGUIアプリを難易度順に上から、実用ツールを作りたい方は中級者向けをどうぞ。学ぶ順番に迷っているなら入門書を終えたら次に作るもの、部品を組み合わせて1本の実用アプリに仕上げる過程はtkinterで画像編集アプリを作るが具体例になります。

体系立てた土台も欲しくなったらPython入門書のおすすめ2冊も選択肢です(書籍紹介ページにはアフィリエイト広告を含みます)。tkinter 専門書ではありませんが、どちらも GUI の章を持っています。

📌
参考にした一次情報(2026-09-20 確認)

ウィジェット構成は Python 公式ドキュメント(3.13・日本語版)の tkintertkinter.ttktkinter.scrolledtext と、手元の Python(3.12.10 / Tk 8.6、3.14.7 / Tk 9.0)での実行結果で確認しました。