利子計算ツールに再挑戦(3)
一か月の修行の成果は出たのか?
・・・まだ満足してはだめなのです。Copilot老師に聞いてみます。
老師の教え
import customtkinter as ctk
class App(ctk.CTk):
def __init__(self, title):
super().__init__()
self.title(title)
# デフォルトのグリッド配置パラメータ
self.grid_params = {'padx': 20, 'pady': 5, 'sticky': 'ws'}
# ウィジェットの作成
self.create_label_entry_unit("元金", "円", 0)
self.create_label_entry_unit("利率", "割/10日", 1)
self.create_label_entry_unit("日数", "日", 2)
# 計算ボタン
self.ctkbutton = ctk.CTkButton(self, text="計算", command=self.button_calc)
self.ctkbutton.grid(row=3, column=2, padx=20, pady=10, sticky="ws")
# 結果表示
self.ctklabel_midashi_kekka = ctk.CTkLabel(self, text="結果")
self.ctklabel_midashi_kekka.grid(row=4, column=0, padx=20, sticky="ws")
self.ctklabel_kekka = ctk.CTkLabel(self, text="- 円", font=(None, 30))
self.ctklabel_kekka.grid(row=4, column=1, padx=20, pady=10, sticky="se", columnspan=2)
self.mainloop()
def create_label_entry_unit(self, label_text, unit_text, row):
ctk.CTkLabel(self, text=label_text).grid(row=row, column=0, **self.grid_params)
entry = ctk.CTkEntry(self)
entry.grid(row=row, column=1, pady=5, sticky="ws")
setattr(self, f'ctkentry_{label_text}', entry)
ctk.CTkLabel(self, text=unit_text).grid(row=row, column=2, padx=20, sticky="ws")
def button_calc(self):
try:
gankin = int(self.ctkentry_元金.get())
riritsu = float(self.ctkentry_利率.get())
nissu = int(self.ctkentry_日数.get())
kekka = gankin * pow(1.0 + riritsu / 10.0, (nissu - 1) // 10)
self.ctklabel_kekka.configure(text=f"{round(kekka):,} 円")
except ValueError:
self.ctklabel_kekka.configure(text="エラーです。入力を見直して")
App("利子計算ツール")
ぐはぁ・・・。
たった47行で・・しかもずっとわかりやすい。おまけに例外処理までちゃんと書いてくれました。
「おぬしもまだまだよのう」と言われた気分です。