Python:簡単なメモ帳ツールをつくる
音声
目次
はじめに
今回できるようになることは、シンプルなGUIメモ帳を作って保存と読み込みができるようになることです。
このセクションでは、変数・関数・モジュール(ファイル分割)の基礎を復習しつつ、実用的な最小アプリを作ります。
今回使う標準ライブラリは、tkinter(GUI)とファイル操作です。
わかりやすくするため、かたまりを小さくして説明します。
実装:最小コード
最小コードは次のとおりです。
import tkinter as tk
from tkinter import filedialog, messagebox
def save():
path = filedialog.asksaveasfilename(defaultextension=".txt")
if path:
with open(path, "w", encoding="utf-8") as f:
f.write(txt.get("1.0", "end").rstrip())
messagebox.showinfo("保存", "保存しました:" + path)
def open_file():
path = filedialog.askopenfilename(filetypes=[("Text", "*.txt")])
if path:
with open(path, "r", encoding="utf-8") as f:
txt.delete("1.0", "end")
txt.insert("1.0", f.read())
root = tk.Tk()
root.title("簡単メモ帳")
txt = tk.Text(root, wrap="word")
txt.pack(expand=True, fill="both")
tk.Button(root, text="開く", command=open_file).pack(side="left")
tk.Button(root, text="保存", command=save).pack(side="right")
root.mainloop()
このコードを実行すると小さなウィンドウが開きます。
テキストを入力して「保存」を押すとファイルとして書き出せます。
「開く」を押すと、選んだテキストファイルを読み込んで表示できます。
要素ごとにコードの解説をしていきます。
- 1) import 部分
import tkinter as tk:GUI部品(ウィンドウ、ボタン、テキスト欄など)を使うための読み込みです。from tkinter import filedialog, messagebox:補助機能を読み込みます。filedialog:ファイルの「開く/保存」選択ダイアログです。messagebox:通知(保存しました等)のダイアログです。
- 2) save 関数(保存)
filedialog.asksaveasfilename(defaultextension=".txt"):保存先を選ばせ、拡張子が無ければ.txtを付けます。if path::キャンセル時は空になるので、空のときは何もしない安全策です。with open(path, "w", encoding="utf-8") as f::UTF-8 でテキストを書き込みます。txt.get("1.0", "end"):テキスト欄の内容を取得します。"1.0":先頭(1行目0文字目)です。"end":末尾です(Textは末尾に改行が入りやすいです)。
.rstrip():末尾の余分な改行や空白を落としてから保存します。messagebox.showinfo(...):保存できたことをポップアップで知らせます。
- 3) open_file 関数(読み込み)
filedialog.askopenfilename(filetypes=[("Text", "*.txt")]):テキストファイルだけ選びやすくします。if path::キャンセル時は空になるので、空のときは何もしないようにします。txt.delete("1.0", "end"):いったん既存の表示を消します。txt.insert("1.0", f.read()):ファイル内容を先頭から差し込みます。
- 4) 画面(ウィンドウ・テキスト・ボタン)
root = tk.Tk():アプリ本体のウィンドウを作成します。root.title("簡単メモ帳"):ウィンドウタイトルを付けます。txt = tk.Text(root, wrap="word"):複数行入力できるテキスト欄です(単語の途中で折り返しにくくします)。txt.pack(expand=True, fill="both"):ウィンドウサイズに合わせてテキスト欄が伸び縮みするように配置します。tk.Button(..., command=open_file)/command=save:クリック時に呼ぶ関数を紐づけます。root.mainloop():GUIの待ち受けを開始します(これが無いとウィンドウがすぐ終了します)。
実行と確認
実行方法は次のとおりです。
- ファイル名を memo.py として保存します。
- コマンドプロンプトやターミナルで python memo.py を実行します。
- VSCodeではファイルを開き、F5または「実行とデバッグ」を選んで実行します。
python memo.py
出力例として、メッセージボックスに "保存しました:C:\path\to\file.txt" と表示されます。
確認方法は次のとおりです。
- テキストを入力して保存したあと、同じファイルを開いて内容が一致するか確認します。
- デバッグ用に一時的に save 関数へ print(len(txt.get("1.0","end"))) を追加し、行数や文字数を確認します。
- txt の型は tkinter.Text なので、type(txt) を確認すると把握できます。
デバッグと1段ステップアップ(使い分けの基準)
デバッグの見方としては、printで中間値を出力して変数の中身を見る方法が即効性があります。
logging(標準ライブラリ)を使うと、実行環境に応じて出力の詳細度を切り替えられます。
小さなGUIでは、messageboxやprintでログを確認すると把握しやすいです。
1段ステップアップとして、例外処理とファイルエンコーディング対応を追加すると堅牢になります。
次は例として、saveをtry/exceptでラップした拡張例です。
# 拡張例(抜粋)
try:
with open(path, "w", encoding="utf-8") as f:
f.write(txt.get("1.0","end").rstrip())
except OSError as e:
messagebox.showerror("エラー", f"保存できませんでした: {e}")
使い分けの基準として、短いテストや学習時はprint中心でも問題ありません。
長期運用や複数人開発では、loggingと例外処理を使う前提にすると安定します。
よくあるミスとして、ファイルダイアログの戻り値が空のときに処理を続けてしまうことがあります。
ユーザーがキャンセルするとpathが空文字になるため、if path:で処理を囲むと回避できます。
別ケースとして、tkinterが未インストールの環境ではImportErrorが出ることがあります。
その場合は環境のPythonを入れ直すか、Linuxではtkinterを追加インストールすると解決しやすいです。
注意(ここだけ)
GUIでのファイル書き込みは上書きされるため、誤って同名ファイルを上書きしないように、必要に応じてバックアップや別名保存を促すUIを追加するのが要チェックです。
要約
- Tkinter を使って簡単なメモ帳を作り、保存と読み込みができます。
- 最小限のコードでウィンドウ、テキスト、ボタンを実装できます。
- 実行は
または VSCode の実行機能で行えます。python memo.py - デバッグは print と logging を状況に応じて使い分けてください。
- よくあるミスはキャンセル時の空パスやエンコーディングの問題なので、if によるチェックと例外処理で対処してください。