import tkinter as tk

class Calculator:
    def __init__(self, root):
        self.root = root
        self.root.title("计算器")
        self.root.geometry("320x450")
        self.root.resizable(False, False)
        
        # 初始化变量
        self.expression = ""
        self.display_var = tk.StringVar(value="0")
        
        self.create_widgets()
    
    def create_widgets(self):
        # 显示屏
        display_frame = tk.Frame(self.root, bg="#222")
        display_frame.pack(fill=tk.X, padx=5, pady=5)
        
        display_label = tk.Entry(
            display_frame,
            textvariable=self.display_var,
            font=("Arial", 28),
            bg="#222",
            fg="white",
            bd=0,
            justify="right",
            state="readonly"
        )
        display_label.pack(fill=tk.X, ipady=20, padx=10)
        
        # 按钮区域
        buttons_frame = tk.Frame(self.root)
        buttons_frame.pack(expand=True, fill=tk.BOTH, padx=5, pady=5)
        
        # 按钮布局
        buttons = [
            ['C', '⌫', '%', '/'],
            ['7', '8', '9', '*'],
            ['4', '5', '6', '-'],
            ['1', '2', '3', '+'],
            ['0', '.', '=']
        ]
        
        # 颜色配置
        colors = {
            'number': {'bg': '#505050', 'fg': 'white'},
            'operator': {'bg': '#ff9500', 'fg': 'white'},
            'function': {'bg': '#a5a5a5', 'fg': 'black'},
            'equals': {'bg': '#ff9500', 'fg': 'white'}
        }
        
        for row_idx, row in enumerate(buttons):
            buttons_frame.rowconfigure(row_idx, weight=1)
            col_count = len(row)
            
            for col_idx, text in enumerate(row):
                buttons_frame.columnconfigure(col_idx, weight=1)
                
                # 确定按钮类型
                if text.isdigit() or text == '.':
                    btn_color = colors['number']
                elif text in ['+', '-', '*', '/']:
                    btn_color = colors['operator']
                elif text == '=':
                    btn_color = colors['equals']
                else:
                    btn_color = colors['function']
                
                # 创建按钮
                btn = tk.Button(
                    buttons_frame,
                    text=text,
                    font=("Arial", 18),
                    bg=btn_color['bg'],
                    fg=btn_color['fg'],
                    relief=tk.FLAT,
                    command=lambda t=text: self.on_click(t)
                )
                btn.grid(row=row_idx, column=col_idx, sticky="nsew", padx=2, pady=2)
                
                # 0按钮跨两列
                if text == '0':
                    btn.grid(columnspan=2, sticky="nsew")
    
    def on_click(self, char):
        if char == 'C':
            self.expression = ""
            self.display_var.set("0")
        
        elif char == '⌫':
            self.expression = self.expression[:-1]
            self.display_var.set(self.expression if self.expression else "0")
        
        elif char == '=':
            try:
                result = eval(self.expression)
                # 格式化结果
                if isinstance(result, float):
                    result = round(result, 10)
                    result = str(result).rstrip('0').rstrip('.')
                self.display_var.set(result)
                self.expression = str(result)
            except:
                self.display_var.set("错误")
                self.expression = ""
        
        else:
            self.expression += char
            self.display_var.set(self.expression)

def main():
    root = tk.Tk()
    calc = Calculator(root)
    root.mainloop()

if __name__ == "__main__":
    main()
