Tkinter超入門:PythonでGUIを作る基礎とCSVビューアの実例

python

はじめに

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ボタン
Entry1行テキスト入力
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に最適

という強力なメリットがあります。

pythontkinter
スポンサーリンク
この記事を書いた人

運営者について

当サイトは、個人が運営する学習・記録ブログです。

AI・データサイエンス・自動化を中心に、
Python、G検定・DS検定の学習内容や、
実際に試しながら整理した知識をまとめています。

特定の企業や団体に属さない個人サイトとして、
学習過程で得た気づきや判断の整理を目的に運営しています。

「知識はあるが、どう使えばよいか分からない」
「情報が多く、判断に迷ってしまう」
といった状態を減らすことを目的に発信しています。

専門家として教える立場ではなく、
自分自身がつまずき、試し、整理してきた過程をそのまま共有するスタイルです。

用語の暗記やテクニックの紹介よりも、
・なぜそう考えるのか
・どの順番で判断するのか
・どこで迷いやすいのか
といった思考の整理を重視しています。

学び場をフォローする
学び場をフォローする
タイトルとURLをコピーしました