import tkinter as tk
import math

class Calculator:
    def __init__(self, root):
        self.root = root
        self.root.title("iPhone Style Calculator")
        self.root.geometry("360x600")
        self.root.resizable(False, False)

        self.expression = ""
        self.display_var = tk.StringVar()
        self.display_var.set("0")

        self.create_widgets()

    def create_widgets(self):
        # 显示屏
        display = tk.Entry(
            self.root,
            textvariable=self.display_var,
            font=("Arial", 32),
            bd=0,
            bg="#000",
            fg="#fff",
            justify="right"
        )
        display.pack(fill="both", ipady=20, padx=10, pady=10)

        # 按钮布局
        buttons = [
            ["AC", "+/-", "%", "÷"],
            ["7", "8", "9", "×"],
            ["4", "5", "6", "-"],
            ["1", "2", "3", "+"],
            ["0", ".", "=", "√"],
            ["x²", "1/x", "sin", "cos"],
            ["tan", "log", "ln", "π"],
            ["e", "C"]
        ]

        for row in buttons:
            frame = tk.Frame(self.root, bg="#000")
            frame.pack(expand=True, fill="both")
            for btn in row:
                self.create_button(frame, btn)

    def create_button(self, parent, text):
        colors = {
            "AC": "#a5a5a5", "+/-": "#a5a5a5", "%": "#a5a5a5",
            "÷": "#ff9500", "×": "#ff9500",
            "-": "#ff9500", "+": "#ff9500",
            "=": "#ff9500"
        }

        bg = colors.get(text, "#333")
        fg = "#000" if bg == "#a5a5a5" else "#fff"

        btn = tk.Button(
            parent,
            text=text,
            font=("Arial", 18),
            bg=bg,
            fg=fg,
            activebackground="#555",
            activeforeground="#fff",
            relief="flat",
            command=lambda: self.on_button_click(text)
        )
        btn.pack(side="left", expand=True, fill="both", padx=2, pady=2)

    def on_button_click(self, char):
        if char == "AC":
            self.expression = ""
            self.display_var.set("0")

        elif char == "C":
            self.expression = self.expression[:-1]
            self.display_var.set(self.expression or "0")

        elif char == "=":
            try:
                result = eval(self.expression.replace("×", "*").replace("÷", "/"))
                self.display_var.set(result)
                self.expression = str(result)
            except:
                self.display_var.set("Error")
                self.expression = ""

        elif char == "+/-":
            if self.expression:
                self.expression = "-" + self.expression
                self.display_var.set(self.expression)

        elif char == "%":
            try:
                self.expression = str(float(self.expression) / 100)
                self.display_var.set(self.expression)
            except:
                pass

        elif char == "√":
            try:
                result = math.sqrt(float(self.expression))
                self.display_var.set(result)
                self.expression = str(result)
            except:
                self.display_var.set("Error")

        elif char == "x²":
            try:
                result = float(self.expression) ** 2
                self.display_var.set(result)
                self.expression = str(result)
            except:
                self.display_var.set("Error")

        elif char == "1/x":
            try:
                result = 1 / float(self.expression)
                self.display_var.set(result)
                self.expression = str(result)
            except:
                self.display_var.set("Error")

        elif char == "sin":
            self.expression = str(math.sin(math.radians(float(self.expression))))
            self.display_var.set(self.expression)

        elif char == "cos":
            self.expression = str(math.cos(math.radians(float(self.expression))))
            self.display_var.set(self.expression)

        elif char == "tan":
            self.expression = str(math.tan(math.radians(float(self.expression))))
            self.display_var.set(self.expression)

        elif char == "log":
            self.expression = str(math.log10(float(self.expression)))
            self.display_var.set(self.expression)

        elif char == "ln":
            self.expression = str(math.log(float(self.expression)))
            self.display_var.set(self.expression)

        elif char == "π":
            self.expression += str(math.pi)
            self.display_var.set(self.expression)

        elif char == "e":
            self.expression += str(math.e)
            self.display_var.set(self.expression)

        else:
            if self.display_var.get() == "0":
                self.expression = char
            else:
                self.expression += char
            self.display_var.set(self.expression)


if __name__ == "__main__":
    root = tk.Tk()
    Calculator(root)
    root.mainloop()