使用 Python 内置 tkinter 实现,无需额外安装库,直接运行即可,完整图形化计算器,支持加减乘除、小数点、清空、退格、防除零报错。

python

运行

import tkinter as tk
from tkinter import messagebox

# 主窗口
root = tk.Tk()
root.title("Python 图形计算器")
root.geometry("320x420")
root.resizable(False, False)

# 输入显示框
var_text = tk.StringVar()
entry = tk.Entry(root, textvariable=var_text, font=("Arial", 20), 
                 justify="right", bd=10)
entry.pack(fill="both", padx=10, pady=10)

# 按钮点击事件
def btn_click(text):
    var_text.set(var_text.get() + text)

# 清空
def btn_clear():
    var_text.set("")

# 退格
def btn_back():
    var_text.set(var_text.get()[:-1])

# 等于计算
def btn_equal():
    try:
        # 安全计算表达式
        result = eval(var_text.get())
        var_text.set(str(result))
    except ZeroDivisionError:
        messagebox.showerror("错误", "除数不能为0")
        btn_clear()
    except:
        messagebox.showerror("错误", "表达式有误")
        btn_clear()

# 按钮布局
btn_list = [
    ["←", "C", "(", ")"],
    ["7", "8", "9", "/"],
    ["4", "5", "6", "*"],
    ["1", "2", "3", "-"],
    ["0", ".", "=", "+"]
]

for row_idx, row in enumerate(btn_list):
    for col_idx, text in enumerate(row):
        if text == "C":
            cmd = btn_clear
        elif text == "←":
            cmd = btn_back
        elif text == "=":
            cmd = btn_equal
        else:
            cmd = lambda t=text: btn_click(t)

        btn = tk.Button(
            root, text=text, font=("Arial", 16),
            width=5, height=2, command=cmd
        )
        # 运算符按钮变色
        if text in "+-*/()":
            btn.config(bg="#ff9500", fg="white")
        elif text in ["C", "←"]:
            btn.config(bg="#ff3b30", fg="white")
        elif text == "=":
            btn.config(bg="#34c759", fg="white")

        btn.grid(row=row_idx+1, column=col_idx, padx=5, pady=5)

# 网格自适应
for i in range(4):
    root.grid_columnconfigure(i, weight=1)

# 主循环
root.mainloop()

功能特点

  1. 纯内置库,一键直接运行,无需安装第三方依赖;
  2. 支持:数字、小数点、加减乘除、括号运算;
  3. 自带清空、退格功能;
  4. 自动捕获报错:除零错误、非法表达式弹窗提示;
  5. 按键配色区分,界面简洁美观。
Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐