import tkinter as tk
from tkinter import font

# 创建主窗口
root = tk.Tk()
root.title("简易计算器")
root.geometry("320x420")
root.resizable(False, False)  # 固定窗口大小

# 自定义字体
num_font = font.Font(size=20)
btn_font = font.Font(size=16)

# 显示输入输出的字符串变量
text_var = tk.StringVar(value="0")

# 显示屏
display = tk.Label(
    root,
    textvariable=text_var,
    font=num_font,
    anchor="e",
    bg="#f5f5f5",
    padx=15,
    height=2
)
display.pack(fill="x", padx=10, pady=10)

# 全局表达式存储
expression = ""

# 按钮点击事件
def btn_click(num):
    global expression
    if text_var.get() == "0" and num not in "+-*/.":
        expression = str(num)
    else:
        expression += str(num)
    text_var.set(expression)

# 清除全部
def clear_all():
    global expression
    expression = ""
    text_var.set("0")

# 退格删除
def back_space():
    global expression
    expression = expression[:-1]
    if expression == "":
        text_var.set("0")
    else:
        text_var.set(expression)

# 计算结果
def calculate():
    global expression
    try:
        # 计算表达式
        result = eval(expression)
        # 去除小数末尾多余0
        if isinstance(result, float) and result.is_integer():
            result = int(result)
        text_var.set(str(result))
        expression = str(result)
    except ZeroDivisionError:
        text_var.set("除零错误")
        expression = ""
    except SyntaxError:
        text_var.set("输入错误")
        expression = ""

# 按钮布局
frame = tk.Frame(root)
frame.pack()

# 按钮列表：(文字, 行, 列, 背景色)
buttons = [
    ("C", 0, 0, "#ff6b6b"), ("←", 0, 1, "#4ecdc4"), ("/", 0, 2, "#95e1d3"), ("*", 0, 3, "#95e1d3"),
    ("7", 1, 0, "#f7fff7"), ("8", 1, 1, "#f7fff7"), ("9", 1, 2, "#f7fff7"), ("-", 1, 3, "#95e1d3"),
    ("4", 2, 0, "#f7fff7"), ("5", 2, 1, "#f7fff7"), ("6", 2, 2, "#f7fff7"), ("+", 2, 3, "#95e1d3"),
    ("1", 3, 0, "#f7fff7"), ("2", 3, 1, "#f7fff7"), ("3", 3, 2, "#f7fff7"), ("=", 3, 3, "#ffa62b"),
    ("0", 4, 0, "#f7fff7"), (".", 4, 1, "#f7fff7"), ("", 4, 2, "#f7fff7"), ("", 4, 3, "#f7fff7")
]

# 循环创建按钮
for text, row, col, bg_color in buttons:
    if text == "":
        continue
    # 绑定对应函数
    if text == "C":
        cmd = clear_all
    elif text == "←":
        cmd = back_space
    elif text == "=":
        cmd = calculate
    else:
        cmd = lambda t=text: btn_click(t)

    btn = tk.Button(
        frame,
        text=text,
        font=btn_font,
        width=4,
        height=2,
        bg=bg_color,
        relief=tk.RIDGE,
        command=cmd
    )
    btn.grid(row=row, column=col, padx=5, pady=5)

# 主循环
root.mainloop()