# 导入tkinter库，用于创建图形界面
import tkinter as tk
from tkinter import *

# 主程序
def main():
    # 创建主窗口
    root = Tk()
    root.title("简易计算器")  # 窗口标题
    root.geometry("300x400")  # 窗口大小
    root.resizable(False, False)  # 禁止调整窗口大小

    # 用于存储输入的表达式
    expression = ""
    
    # 显示输入结果的文本框
    input_text = StringVar()
    input_text.set("")

    # ========== 功能函数 ==========
    # 点击数字/符号按钮
    def click(item):
        nonlocal expression
        expression += str(item)
        input_text.set(expression)

    # 清空显示屏
    def clear():
        nonlocal expression
        expression = ""
        input_text.set("")

    # 计算结果
    def calculate():
        nonlocal expression
        try:
            # 计算表达式结果
            result = str(eval(expression))
            input_text.set(result)
            expression = result
        except:
            # 出错时显示错误
            input_text.set("错误")
            expression = ""

    # ========== 界面布局 ==========
    # 显示框
    input_frame = Frame(root, width=300, height=50, bd=0, highlightbackground="black", highlightcolor="black", highlightthickness=2)
    input_frame.pack(side=TOP)
    input_field = Entry(input_frame, font=('arial', 18, 'bold'), textvariable=input_text, width=22, bg="#eee", bd=0, justify=RIGHT)
    input_field.grid(row=0, column=0)
    input_field.pack(ipady=10)

    # 第一行：清除 / 清空 / % / 除号
    btn_frame = Frame(root, width=300, height=350, bg="#fff")
    btn_frame.pack()

    Button(btn_frame, text="C", width=9, height=3, bd=0, bg="#f06", fg="#fff", command=lambda: clear()).grid(row=0, column=0, padx=1, pady=1)
    Button(btn_frame, text="CE", width=9, height=3, bd=0, bg="#f06", fg="#fff", command=lambda: clear()).grid(row=0, column=1, padx=1, pady=1)
    Button(btn_frame, text="%", width=9, height=3, bd=0, bg="#aaa", fg="#fff", command=lambda: click("%")).grid(row=0, column=2, padx=1, pady=1)
    Button(btn_frame, text="/", width=9, height=3, bd=0, bg="#aaa", fg="#fff", command=lambda: click("/")).grid(row=0, column=3, padx=1, pady=1)

    # 第二行：7 8 9 *
    Button(btn_frame, text="7", width=9, height=3, bd=0, bg="#fff", command=lambda: click(7)).grid(row=1, column=0, padx=1, pady=1)
    Button(btn_frame, text="8", width=9, height=3, bd=0, bg="#fff", command=lambda: click(8)).grid(row=1, column=1, padx=1, pady=1)
    Button(btn_frame, text="9", width=9, height=3, bd=0, bg="#fff", command=lambda: click(9)).grid(row=1, column=2, padx=1, pady=1)
    Button(btn_frame, text="*", width=9, height=3, bd=0, bg="#aaa", fg="#fff", command=lambda: click("*")).grid(row=1, column=3, padx=1, pady=1)

    # 第三行：4 5 6 -
    Button(btn_frame, text="4", width=9, height=3, bd=0, bg="#fff", command=lambda: click(4)).grid(row=2, column=0, padx=1, pady=1)
    Button(btn_frame, text="5", width=9, height=3, bd=0, bg="#fff", command=lambda: click(5)).grid(row=2, column=1, padx=1, pady=1)
    Button(btn_frame, text="6", width=9, height=3, bd=0, bg="#fff", command=lambda: click(6)).grid(row=2, column=2, padx=1, pady=1)
    Button(btn_frame, text="-", width=9, height=3, bd=0, bg="#aaa", fg="#fff", command=lambda: click("-")).grid(row=2, column=3, padx=1, pady=1)

    # 第四行：1 2 3 +
    Button(btn_frame, text="1", width=9, height=3, bd=0, bg="#fff", command=lambda: click(1)).grid(row=3, column=0, padx=1, pady=1)
    Button(btn_frame, text="2", width=9, height=3, bd=0, bg="#fff", command=lambda: click(2)).grid(row=3, column=1, padx=1, pady=1)
    Button(btn_frame, text="3", width=9, height=3, bd=0, bg="#fff", command=lambda: click(3)).grid(row=3, column=2, padx=1, pady=1)
    Button(btn_frame, text="+", width=9, height=3, bd=0, bg="#aaa", fg="#fff", command=lambda: click("+")).grid(row=3, column=3, padx=1, pady=1)

    # 第五行：0  .  =
    Button(btn_frame, text="0", width=20, height=3, bd=0, bg="#fff", command=lambda: click(0)).grid(row=4, column=0, columnspan=2, padx=1, pady=1)
    Button(btn_frame, text=".", width=9, height=3, bd=0, bg="#fff", command=lambda: click(".")).grid(row=4, column=2, padx=1, pady=1)
    Button(btn_frame, text="=", width=9, height=3, bd=0, bg="#58f", fg="#fff", command=lambda: calculate()).grid(row=4, column=3, padx=1, pady=1)

    # 运行窗口
    root.mainloop()

# 启动程序
if __name__ == "__main__":
    main()