見出し画像

利子計算ツールに再挑戦(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行で・・しかもずっとわかりやすい。おまけに例外処理までちゃんと書いてくれました。

「おぬしもまだまだよのう」と言われた気分です。

いいなと思ったら応援しよう!