import tkinter as tk
from tkinter import *
from tkinter import END
def button_click(number):
current = entry.get()
entry.delete(0, END)
entry.insert(0, str(current) + str(number))
def button_clear():
entry.delete(0, END)
def button_add():
first_number = entry.get()
global f_num
global math
math = "addition"
f_num = float(first_number)
entry.delete(0, END)
def button_equal():
second_number = entry.get()
entry.delete(0, END)
if math == "addition":
entry.insert(0, f_num + float(second_number))
elif math == "subtraction":
entry.insert(0, f_num - float(second_number))
elif math == "multiplication":
entry.insert(0, f_num * float(second_number))
elif math == "division":
if second_number != '0':
entry.insert(0, f_num / int(second_number))
else:
entry.insert(0, "Error")
def button_subtract():
first_number = entry.get()
global f_num
global math
math = "subtraction"
f_num = float(first_number)
entry.delete(0, END)
def button_multiply():
first_number = entry.get()
global f_num
global math
math = "multiplication"
f_num = float(first_number)
entry.delete(0, END)
def button_divide():
first_number = entry.get()
global f_num
global math
math = "division"
f_num = float(first_number)
entry.delete(0, END)
def button_delete():
current_value = entry.get()
if current_value:
new_value = current_value[:-1]
entry.delete(0, END)
entry.insert(0, new_value)
def button_decimal_point():
current_input = entry.get()
if '.' not in current_input:
entry.insert(tk.END, '.')
root = Tk()
root.title("计算器")
entry = tk.Entry(root, width=23, borderwidth=5)
entry.grid(row=0, column=0, columnspan=4, padx=10, pady=10)
Button(root, text="C",command=button_clear).grid(row=1, column=0,ipadx=14,padx=1)
Button(root, text="7",command=lambda: button_click(7)).grid(row=2, column=0,ipadx=15)
Button(root, text="4",command=lambda: button_click(4)).grid(row=3, column=0,ipadx=15)
Button(root, text="1",command=lambda: button_click(1)).grid(row=4, column=0,ipadx=15)
Button(root, text="0",command=lambda: button_click(0)).grid(row=5, column=0,ipadx=15)
Button(root, text="DEL",command=button_delete).grid(row=1, column=1,ipadx=7,padx=1)
Button(root, text="8",command=lambda: button_click(8)).grid(row=2, column=1,ipadx=15)
Button(root, text="5",command=lambda: button_click(5)).grid(row=3, column=1,ipadx=15)
Button(root, text="2",command=lambda: button_click(2)).grid(row=4, column=1,ipadx=15)
Button(root, text=".",command=button_decimal_point).grid(row=5, column=1,ipadx=15)
Button(root, text="BCK",command=button_delete).grid(row=1, column=2,ipadx=6,padx=1)
Button(root, text="9",command=lambda: button_click(9)).grid(row=2, column=2,ipadx=15)
Button(root, text="6",command=lambda: button_click(6)).grid(row=3, column=2,ipadx=15)
Button(root, text="3",command=lambda: button_click(3)).grid(row=4, column=2,ipadx=15)
Button(root, text="=",command=button_equal).grid(row=5, column=2,columnspan=2,ipadx=40)
Button(root, text="/",command=button_divide).grid(row=1, column=3,ipadx=15,padx=0)
Button(root, text="*",command=button_multiply).grid(row=2, column=3,ipadx=15)
Button(root, text="-",command=button_subtract).grid(row=3, column=3,ipadx=15)
Button(root, text="+", command=button_add).grid(row=4, column=3,ipadx=14)
root.mainloop()
对程序的分析:
初始化与界面布局
- 首先,导入了必要的Tkinter库,并定义了一个名为
button_click
的函数用于处理数字按钮的点击事件,以及其他几个函数分别处理清空、加减乘除运算、等于、删除单个字符和小数点的插入。 - 使用
Tk
类创建了主窗口,并设置了窗口的标题为"计算器"。 - 创建了一个
Entry
组件作为计算器的显示屏,用于显示输入和计算结果,通过grid
方法进行布局。 - 定义了一系列按钮,每个按钮都绑定了一个命令,当按钮被点击时,会执行相应的函数。
功能实现
- 数字输入:通过
button_click
函数实现,它接收一个数字参数,然后在显示屏上追加这个数字。 - 运算逻辑:通过
button_add
、button_subtract
、button_multiply
、button_divide
分别实现加、减、乘、除的逻辑。这些函数会记录第一个操作数,并设定一个全局变量math
来标记当前的运算类型。button_equal
函数则根据之前设定的运算类型执行对应的计算,并显示结果。 - 清空与删除:
button_clear
用于清空显示屏上的所有内容;button_delete
用于删除最后一个输入的字符。 - 小数点处理:
button_decimal_point
确保小数点只被添加一次。 - 界面布局:使用
grid
布局管理器组织各个按钮,使它们在界面上整齐排列
![](https://img-blog.csdnimg.cn/direct/396e12535cc2497490e8b280fe305627.png)