ここでは、「メモ付き電卓(GUI版)」をtkinter と PySimpleGUI の両方のサンプルで紹介します。
① tkinter版:メモ付き電卓
import tkinter as tk
from tkinter import messagebox
import datetime
HISTORY_FILE = "calc_history.txt"
def save_history(expression, result):
"""履歴をファイルに追記"""
with open(HISTORY_FILE, "a", encoding="utf-8") as f:
time_str = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
f.write(f"[{time_str}] {expression} = {result}\n")
def calculate():
expr = entry.get()
if not expr.strip():
return
try:
result = eval(expr)
result_label.config(text=f"結果:{result}")
save_history(expr, result)
entry.delete(0, tk.END)
except Exception as e:
messagebox.showerror("エラー", f"無効な式です:{e}")
# --- GUI構築 ---
root = tk.Tk()
root.title("メモ付き電卓(tkinter版)")
root.geometry("320x200")
frame = tk.Frame(root, padx=10, pady=10)
frame.pack(fill="both", expand=True)
tk.Label(frame, text="数式を入力(例:2+3*4)").pack()
entry = tk.Entry(frame, font=("Arial", 14))
entry.pack(fill="x", pady=5)
tk.Button(frame, text="計算", command=calculate).pack(pady=5)
result_label = tk.Label(frame, text="結果:", font=("Arial", 14))
result_label.pack(pady=5)
tk.Label(frame, text="履歴は calc_history.txt に保存されます。", fg="gray").pack(side="bottom")
root.mainloop()
Python🖥️ 実行すると…
- シンプルなウィンドウが開き、数式を入力して「計算」を押すと結果を表示。
calc_history.txtに日時付きで記録されます。
[2025-11-06 08:05:12] 2+3*4 = 14
② PySimpleGUI版:メモ付き電卓
より見やすく・短く書ける GUI ライブラリ版です👇
import PySimpleGUI as sg
import datetime
HISTORY_FILE = "calc_history.txt"
def save_history(expression, result):
"""履歴をファイルに追記"""
with open(HISTORY_FILE, "a", encoding="utf-8") as f:
time_str = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
f.write(f"[{time_str}] {expression} = {result}\n")
# --- GUI レイアウト ---
layout = [
[sg.Text("数式を入力してください(例:2+3*4)")],
[sg.Input(key="expr")],
[sg.Button("計算"), sg.Button("終了")],
[sg.Text("結果:", key="result", size=(30, 1), text_color="blue")],
[sg.Text("履歴は calc_history.txt に保存されます。", text_color="gray")]
]
window = sg.Window("メモ付き電卓(PySimpleGUI版)", layout)
while True:
event, values = window.read()
if event in (sg.WINDOW_CLOSED, "終了"):
break
if event == "計算":
expr = values["expr"]
if not expr.strip():
continue
try:
result = eval(expr)
window["result"].update(f"結果:{result}")
save_history(expr, result)
window["expr"].update("") # 入力欄をクリア
except Exception as e:
sg.popup_error(f"エラー: {e}")
window.close()
Python✅ PySimpleGUIの特長
| 特長 | 説明 |
|---|---|
| コードが短く、初心者にも読みやすい | |
| ウィンドウレイアウトを「リスト」で書ける | |
sg.popup()などの便利機能多数 | |
| クロスプラットフォーム対応(Windows/macOS/Linux) |
どちらを選ぶ?
| ライブラリ | 向いている人 |
|---|---|
| tkinter | 標準ライブラリで完結したい人(追加インストール不要) |
| PySimpleGUI | コードを簡潔に書きたい人、初心者向けGUI練習に最適 |
