import tkinter as tk
from tkinter import ttk

# 创建主窗口
root = tk.Tk()
root.title("趣味计算器")
root.geometry("420x520")
root.resizable(False, False)
root.configure(bg="#2c3e50")

# 存储算式
expression = ""
input_text = tk.StringVar()

# 点击数字按钮
def button_click(item):
    global expression
    expression += str(item)
    input_text.set(expression)

# 清空屏幕
def clear():
    global expression
    expression = ""
    input_text.set("")

# 删除最后一位
def backspace():
    global expression
    expression = expression[:-1]
    input_text.set(expression)

# 计算结果
def calculate():
    global expression
    try:
        result = str(eval(expression))
        input_text.set(result)
        expression = result
    except ZeroDivisionError:
        input_text.set("除零错误")
        expression = ""
    except Exception:
        input_text.set("输入错误")
        expression = ""


# 显示框
display_frame = tk.Frame(root, bg="#2c3e50")
display_frame.pack(padx=10, pady=20)

display = ttk.Entry(display_frame, textvariable=input_text, font=("Arial", 24), justify="right")
display.pack(fill=tk.BOTH, ipadx=8, ipady=15)

# 按钮区域
btn_frame = tk.Frame(root, bg="#2c3e50")
btn_frame.pack()

# 按钮颜色配置
num_color = "#34495e"
op_color = "#e67e22"
clear_color = "#e74c3c"
equal_color = "#27ae60"

# 第一行
tk.Button(btn_frame, text="C", width=5, height=2, font=("Arial",16),bg=clear_color,fg="white",command=clear).grid(row=0,column=0,padx=5,pady=5)
tk.Button(btn_frame, text="⌫", width=5, height=2, font=("Arial",16),bg=clear_color,fg="white",command=backspace).grid(row=0,column=1,padx=5,pady=5)
tk.Button(btn_frame, text="/", width=5, height=2, font=("Arial",16),bg=op_color,fg="white",command=lambda:button_click("/")).grid(row=0,column=2,padx=5,pady=5)
tk.Button(btn_frame, text="*", width=5, height=2, font=("Arial",16),bg=op_color,fg="white",command=lambda:button_click("*")).grid(row=0,column=3,padx=5,pady=5)

# 第二行
tk.Button(btn_frame, text="7", width=5, height=2, font=("Arial",16),bg=num_color,fg="white",command=lambda:button_click(7)).grid(row=1,column=0,padx=5,pady=5)
tk.Button(btn_frame, text="8", width=5, height=2, font=("Arial",16),bg=num_color,fg="white",command=lambda:button_click(8)).grid(row=1,column=1,padx=5,pady=5)
tk.Button(btn_frame, text="9", width=5, height=2, font=("Arial",16),bg=num_color,fg="white",command=lambda:button_click(9)).grid(row=1,column=2,padx=5,pady=5)
tk.Button(btn_frame, text="-", width=5, height=2, font=("Arial",16),bg=op_color,fg="white",command=lambda:button_click("-")).grid(row=1,column=3,padx=5,pady=5)

# 第三行
tk.Button(btn_frame, text="4", width=5, height=2, font=("Arial",16),bg=num_color,fg="white",command=lambda:button_click(4)).grid(row=2,column=0,padx=5,pady=5)
tk.Button(btn_frame, text="5", width=5, height=2, font=("Arial",16),bg=num_color,fg="white",command=lambda:button_click(5)).grid(row=2,column=1,padx=5,pady=5)
tk.Button(btn_frame, text="6", width=5, height=2, font=("Arial",16),bg=num_color,fg="white",command=lambda:button_click(6)).grid(row=2,column=2,padx=5,pady=5)
tk.Button(btn_frame, text="+", width=5, height=2, font=("Arial",16),bg=op_color,fg="white",command=lambda:button_click("+")).grid(row=2,column=3,padx=5,pady=5)

# 第四行
tk.Button(btn_frame, text="1", width=5, height=2, font=("Arial",16),bg=num_color,fg="white",command=lambda:button_click(1)).grid(row=3,column=0,padx=5,pady=5)
tk.Button(btn_frame, text="2", width=5, height=2, font=("Arial",16),bg=num_color,fg="white",command=lambda:button_click(2)).grid(row=3,column=1,padx=5,pady=5)
tk.Button(btn_frame, text="3", width=5, height=2, font=("Arial",16),bg=num_color,fg="white",command=lambda:button_click(3)).grid(row=3,column=2,padx=5,pady=5)
# 等于号占两行高度
tk.Button(btn_frame, text="=", width=5, height=5, font=("Arial",16),bg=equal_color,fg="white",command=calculate).grid(row=3,column=3,rowspan=2,padx=5,pady=5)

# 第五行
tk.Button(btn_frame, text="0", width=12, height=2, font=("Arial",16),bg=num_color,fg="white",command=lambda:button_click(0)).grid(row=4,column=0,columnspan=2,padx=5,pady=5)
tk.Button(btn_frame, text=".", width=5, height=2, font=("Arial",16),bg=num_color,fg="white",command=lambda:button_click(".")).grid(row=4,column=2,padx=5,pady=5)


root.mainloop()
