はじめに
Python には GUI(グラフィカルユーザインターフェース)を作るための標準ライブラリ Tkinter があります。
インストール不要、Python を入れたらすぐに使えるのが大きな魅力です。
この記事では、Tkinter の初歩から各種設定の詳細を解説し、最後に「Excel風CSVビューア」を作る実例を紹介します。
1. Tkinterとは?
- Python 標準ライブラリの GUI ツールキット
- Tk という GUI フレームワークを Python から操作できるようにしたもの
- Windows / macOS / Linux で動作
- 軽量で学習コストが低く、初心者向け
Tkinterの特徴
- Python に標準で入っている(追加インストール不要)
- ウィンドウ・ボタン・テキスト入力など基本部品(ウィジェット)が揃っている
- 他のGUIライブラリ(PyQt, wxPythonなど)に比べてシンプル
2. 最小のTkinterプログラム
まずはウィンドウを開いてみましょう。
import tkinter as tk
root = tk.Tk() # メインウィンドウ作成
root.title("Hello Tkinter") # タイトル
root.geometry("400x300") # ウィンドウサイズ(幅x高さ)
root.mainloop() # イベントループ
実行すると、真っ白なウィンドウが表示されます。
これが Tkinter アプリの最小構成です。
3. Tkinterの基本構造
3.1 ウィンドウ
tk.Tk()… メインウィンドウtitle("文字列")… タイトルバーに文字を表示geometry("800x600")… 初期サイズを指定
3.2 ウィジェット
Tkinter で使える主な部品(ウィジェット)は以下の通りです:
| ウィジェット | 説明 |
|---|---|
Label | テキスト表示 |
Button | ボタン |
Entry | 1行テキスト入力 |
Text | 複数行テキスト入力 |
Checkbutton | チェックボックス |
Radiobutton | ラジオボタン |
Frame | コンテナ(ウィジェットをまとめる箱) |
Canvas | 描画用キャンバス |
Treeview | 表形式のリスト(今回のCSV Viewerで使用) |
3.3 配置方法(レイアウトマネージャ)
ウィジェットは pack, grid, place で配置します。
pack()… 上下左右に詰めて配置(簡単)grid(row, column)… 行・列指定で配置(表形式)place(x, y)… 座標指定(細かい制御)
4. 各種設定の詳細
4.1 フォント
Tkinter では tkinter.font を使ってフォントを指定できます。
import tkinter.font as tkfont
font = tkfont.Font(family="Arial", size=14, weight="bold")
label = tk.Label(root, text="Hello", font=font)
4.2 イベント(キーやマウス操作)
キー入力やクリックを処理するには bind を使います。
def on_key(event):
print("押されたキー:", event.keysym)
root.bind("<Left>", on_key) # ←キーを押すと呼ばれる
4.3 スクロールバー
スクロールバーはウィジェットと「command」で双方向に接続します。
scroll = tk.Scrollbar(root, orient="vertical")
text = tk.Text(root, yscrollcommand=scroll.set)
scroll.config(command=text.yview)
5. CSVビューアを作ってみる(完成編)
ここからは、これまで学んだ Tkinter の基礎を使って、
実用的な「CSVビューア」 を完成させます。
この章のゴールは次の通りです。
- CSVファイルをGUIから選択できる
- 表形式(Excel風)で中身を表示できる
- 実務で「ちょっと確認したい」ときに使える
5-1. 使用するウィジェット構成
CSVビューアでは、主に次の Tkinter / ttk ウィジェットを使用します。
| 役割 | ウィジェット |
|---|---|
| メインウィンドウ | Tk |
| ファイル選択 | Button, filedialog |
| 表表示 | ttk.Treeview |
| スクロール | Scrollbar |
特に Treeview は、表形式データを扱う際の中心となるウィジェットです。
5-2. CSVを読み込んで表示する基本コード
まずは、CSVファイルを選択して表示する最小構成です。
```python
import tkinter as tk
from tkinter import ttk, filedialog
import csv
def load_csv():
file_path = filedialog.askopenfilename(
filetypes=[("CSV files", "*.csv")])
if not file_path:
return
# 既存データをクリア
tree.delete(*tree.get_children())
with open(file_path, newline="", encoding="utf-8") as f:
reader = csv.reader(f)
headers = next(reader)
tree["columns"] = headers
tree["show"] = "headings"
for h in headers:
tree.heading(h, text=h)
tree.column(h, width=120)
for row in reader:
tree.insert("", tk.END, values=row)
root = tk.Tk()
root.title("CSV Viewer")
root.geometry("800x500")
btn = tk.Button(root, text="CSVを開く", command=load_csv)
btn.pack(pady=5)
tree = ttk.Treeview(root)
tree.pack(fill=tk.BOTH, expand=True)
root.mainloop()5-3. このコードで何をしているか
処理の流れを整理します。
① CSVファイルを選択
filedialog.askopenfilename()GUIでCSVファイルを選択できます。
② Treeviewに列を設定
tree["columns"] = headers
tree["show"] = "headings"CSVの1行目を列名として使用しています。
③ 行データを表に追加
tree.insert("", tk.END, values=row)CSVの各行をそのまま表形式で表示します。
5-4. スクロールバーを追加する(実用性アップ)
行数が多いCSVでは、スクロールバーが必須です。
scroll_y = ttk.Scrollbar(root, orient="vertical", command=tree.yview)
tree.configure(yscrollcommand=scroll_y.set)
scroll_y.pack(side=tk.RIGHT, fill=tk.Y)
tree.pack(fill=tk.BOTH, expand=True)これで 数万行のCSVでも閲覧可能 になります。
5-5. よくあるハマりどころ
- 文字コード問題
日本語CSVではutf-8-sigが必要になる場合があります。 - 列数が多すぎるCSV
列幅を固定するか、横スクロールの追加が現実的です。 - 巨大CSVファイル
pandasで先頭N行のみ表示するなどの工夫が安全です。
6. まとめ
Tkinterは見た目こそシンプルですが、
- Python標準ライブラリで完結
- インストール不要
- 社内ツール・検証用GUIに最適
という強力なメリットがあります。
