python 用tkinter实现一个如图简单计算器,可以进行加、减乘、除四则运算,支持小数点,多次运算 由label和button构成灵活使用eval()函数用grid布局 除零错误提示
时间: 2024-03-18 22:41:30 浏览: 15
好的,我可以帮你解决这个问题。以下是实现计算器的 Python 代码:
```python
import tkinter as tk
class Calculator:
def __init__(self, master):
self.master = master
master.title("Calculator")
master.resizable(False, False)
self.equation = tk.StringVar()
self.equation.set("0")
self.expression = ""
self.result = tk.Label(master, textvariable=self.equation, font=("Arial", 20), bg="white", width=15, height=2)
self.result.grid(row=0, column=0, columnspan=4, padx=5, pady=5)
clear_button = tk.Button(master, text="C", font=("Arial", 16), bg="red", fg="white", width=3, height=1, command=self.clear)
clear_button.grid(row=1, column=0, padx=5, pady=5)
plus_minus_button = tk.Button(master, text="+/-", font=("Arial", 16), bg="lightgray", width=3, height=1, command=self.plus_minus)
plus_minus_button.grid(row=1, column=1, padx=5, pady=5)
percent_button = tk.Button(master, text="%", font=("Arial", 16), bg="lightgray", width=3, height=1, command=lambda: self.add_expression("%"))
percent_button.grid(row=1, column=2, padx=5, pady=5)
divide_button = tk.Button(master, text="/", font=("Arial", 16), bg="lightgray", width=3, height=1, command=lambda: self.add_expression("/"))
divide_button.grid(row=1, column=3, padx=5, pady=5)
seven_button = tk.Button(master, text="7", font=("Arial", 16), bg="lightgray", width=3, height=1, command=lambda: self.add_expression("7"))
seven_button.grid(row=2, column=0, padx=5, pady=5)
eight_button = tk.Button(master, text="8", font=("Arial", 16), bg="lightgray", width=3, height=1, command=lambda: self.add_expression("8"))
eight_button.grid(row=2, column=1, padx=5, pady=5)
nine_button = tk.Button(master, text="9", font=("Arial", 16), bg="lightgray", width=3, height=1, command=lambda: self.add_expression("9"))
nine_button.grid(row=2, column=2, padx=5, pady=5)
multiply_button = tk.Button(master, text="*", font=("Arial", 16), bg="lightgray", width=3, height=1, command=lambda: self.add_expression("*"))
multiply_button.grid(row=2, column=3, padx=5, pady=5)
four_button = tk.Button(master, text="4", font=("Arial", 16), bg="lightgray", width=3, height=1, command=lambda: self.add_expression("4"))
four_button.grid(row=3, column=0, padx=5, pady=5)
five_button = tk.Button(master, text="5", font=("Arial", 16), bg="lightgray", width=3, height=1, command=lambda: self.add_expression("5"))
five_button.grid(row=3, column=1, padx=5, pady=5)
six_button = tk.Button(master, text="6", font=("Arial", 16), bg="lightgray", width=3, height=1, command=lambda: self.add_expression("6"))
six_button.grid(row=3, column=2, padx=5, pady=5)
minus_button = tk.Button(master, text="-", font=("Arial", 16), bg="lightgray", width=3, height=1, command=lambda: self.add_expression("-"))
minus_button.grid(row=3, column=3, padx=5, pady=5)
one_button = tk.Button(master, text="1", font=("Arial", 16), bg="lightgray", width=3, height=1, command=lambda: self.add_expression("1"))
one_button.grid(row=4, column=0, padx=5, pady=5)
two_button = tk.Button(master, text="2", font=("Arial", 16), bg="lightgray", width=3, height=1, command=lambda: self.add_expression("2"))
two_button.grid(row=4, column=1, padx=5, pady=5)
three_button = tk.Button(master, text="3", font=("Arial", 16), bg="lightgray", width=3, height=1, command=lambda: self.add_expression("3"))
three_button.grid(row=4, column=2, padx=5, pady=5)
plus_button = tk.Button(master, text="+", font=("Arial", 16), bg="lightgray", width=3, height=1, command=lambda: self.add_expression("+"))
plus_button.grid(row=4, column=3, padx=5, pady=5)
zero_button = tk.Button(master, text="0", font=("Arial", 16), bg="lightgray", width=3, height=1, command=lambda: self.add_expression("0"))
zero_button.grid(row=5, column=0, padx=5, pady=5)
decimal_button = tk.Button(master, text=".", font=("Arial", 16), bg="lightgray", width=3, height=1, command=lambda: self.add_expression("."))
decimal_button.grid(row=5, column=1, padx=5, pady=5)
equal_button = tk.Button(master, text="=", font=("Arial", 16), bg="lightgray", width=3, height=1, command=self.calculate)
equal_button.grid(row=5, column=2, padx=5, pady=5)
def clear(self):
self.expression = ""
self.equation.set("0")
def plus_minus(self):
if self.equation.get() == "0":
return
elif self.equation.get()[0] == "-":
self.equation.set(self.equation.get()[1:])
else:
self.equation.set("-" + self.equation.get())
def add_expression(self, value):
if self.equation.get() == "0":
self.equation.set(value)
else:
self.expression += value
self.equation.set(self.expression)
def calculate(self):
try:
self.expression = str(eval(self.expression))
self.equation.set(self.expression)
except ZeroDivisionError:
self.equation.set("Cannot Divide by 0")
self.expression = ""
root = tk.Tk()
calculator = Calculator(root)
root.mainloop()
```
这个计算器支持加、减、乘、除四则运算,支持小数点和多次运算,还能够处理除以0的错误。你可以在主函数中创建一个Calculator的实例,即可启动这个计算器。