import tkinter as tk
from tkinter import ttk

class CalculatorApp:
    def __init__(self, root):
        # 初始化主窗口
        self.root = root
        self.root.title("计算器")
        self.root.geometry("400x500")  # 窗口大小
        self.root.resizable(False, False)  # 禁止调整窗口大小
        
        # 设置字体样式
        self.font_large = ("Arial", 24, "bold")
        self.font_normal = ("Arial", 16)
        
        # 存储计算表达式和结果
        self.expression = ""
        
        # 创建界面元素
        self.create_widgets()
    
    def create_widgets(self):
        # 1. 显示结果的输入框
        self.result_var = tk.StringVar()
        self.result_entry = ttk.Entry(
            self.root,
            textvariable=self.result_var,
            font=self.font_large,
            justify="right",
            state="readonly"
        )
        self.result_entry.pack(fill="x", padx=20, pady=20, ipady=15)
        
        # 2. 创建按钮框架
        button_frame = ttk.Frame(self.root)
        button_frame.pack(fill="both", expand=True, padx=20, pady=10)
        
        # 按钮布局（按计算器常见布局排列）
        buttons = [
            ["C", "←", "%", "/"],
            ["7", "8", "9", "*"],
            ["4", "5", "6", "-"],
            ["1", "2", "3", "+"],
            ["0", ".", "="]
        ]
        
        # 定义按钮颜色（区分功能键和数字键）
        button_colors = {
            "C": "#ff6b6b", "←": "#feca57", "%": "#48dbfb", "/": "#48dbfb",
            "*": "#48dbfb", "-": "#48dbfb", "+": "#48dbfb", "=": "#1dd1a1",
            ".": "#5f27cd", "0": "#00d2d3", "1": "#00d2d3", "2": "#00d2d3",
            "3": "#00d2d3", "4": "#00d2d3", "5": "#00d2d3", "6": "#00d2d3",
            "7": "#00d2d3", "8": "#00d2d3", "9": "#00d2d3"
        }
        
        # 生成按钮
        for row_idx, row in enumerate(buttons):
            # 调整行权重，让按钮均匀分布
            button_frame.grid_rowconfigure(row_idx, weight=1)
            
            for col_idx, text in enumerate(row):
                # 调整列权重
                button_frame.grid_columnconfigure(col_idx, weight=1)
                
                # 创建按钮
                btn = tk.Button(
                    button_frame,
                    text=text,
                    font=self.font_normal,
                    bg=button_colors.get(text, "#ffffff"),
                    fg="#000000",
                    relief="flat",
                    command=lambda t=text: self.on_button_click(t)
                )
                # 特殊处理等号按钮（跨列）
                if text == "=":
                    btn.grid(row=row_idx, column=col_idx, columnspan=2, sticky="nsew", padx=5, pady=5)
                else:
                    btn.grid(row=row_idx, column=col_idx, sticky="nsew", padx=5, pady=5)
    
    def on_button_click(self, text):
        """处理按钮点击事件"""
        if text == "C":
            # 清空表达式和结果
            self.expression = ""
            self.result_var.set("")
        elif text == "←":
            # 退格（删除最后一个字符）
            self.expression = self.expression[:-1]
            self.result_var.set(self.expression)
        elif text == "=":
            # 计算结果
            try:
                # 替换百分号为除以100（%功能）
                calc_expr = self.expression.replace("%", "/100")
                # 执行计算
                result = eval(calc_expr)
                # 处理小数末尾的0（如 5.0 显示为 5）
                if isinstance(result, float) and result.is_integer():
                    result = int(result)
                self.result_var.set(str(result))
                # 把结果作为新的表达式，方便继续计算
                self.expression = str(result)
            except:
                self.result_var.set("错误")
                self.expression = ""
        else:
            # 数字/运算符/小数点，追加到表达式
            self.expression += text
            self.result_var.set(self.expression)

if __name__ == "__main__":
    # 创建主窗口并运行程序
    root = tk.Tk()
    app = CalculatorApp(root)
    root.mainloop()