在本篇文章中,我们将学习如何使用Python编写一个简单的计算器,并创建一个图形用户界面(GUI)以实现计算器的基本功能。
我们将使用Python标准库中的tkinter模块来创建GUI,并使用基本的算术操作符(加、减、乘、除)来实现计算器的计算功能。
简易版本
下面是一个简单的Python计算器代码,可以执行基本的加、减、乘、除运算:
def calculator():
operation = input("请选择运算符(+, -, *, /): ")
num1 = float(input("请输入第一个数字: "))
num2 = float(input("请输入第二个数字: "))
if operation == '+':
print(num1 + num2)
elif operation == '-':
print(num1 - num2)
elif operation == '*':
print(num1 * num2)
elif operation == '/':
if num2 == 0:
print("错误:除数不能为0")
else:
print(num1 / num2)
else:
print("错误:输入的运算符不正确")
# 调用计算器函数
calculator()
在此代码中,我们首先使用input()函数获取用户选择的运算符和输入的数字。然后,使用if语句根据选择的运算符执行相应的计算,并打印结果。如果用户选择的是除法运算符,我们还需要检查除数是否为0,以避免除以0的错误。
注意,此代码没有考虑到输入非数字的情况。如果输入了非数字字符,代码会抛出异常。可以通过添加try-except语句来处理此类异常。
这个简易计算器涉及到以下技术要点:
• 函数定义和调用:使用def关键字定义了一个名为calculator的函数,可以通过调用该函数来执行计算器程序。
• 输入输出操作:使用input函数获取用户输入的运算符和数字,并使用print函数打印计算结果。
• 条件语句 :使用if-elif-else语句根据用户选择的运算符执行相应的计算。
• 异常处理:如果用户输入的数字不是有效的浮点数,代码会抛出异常。可以使用try-except语句来处理这种异常情况。
• 基本的算术运算:加减乘除运算,这里使用了基本的算术运算符+、-、*和/来执行计算。
创建计算器GUI
首先,我们需要导入tkinter模块,并创建一个名为CalculatorGUI的类。这个类将承载计算器的所有功能,并创建一个GUI来显示计算器的各个组件。
import tkinter as tk
class CalculatorGUI:
def __init__(self, master):
self.master = master
master.title("简易计算器")
# 创建计算器组件
# ...
在__init__方法中,我们初始化了主窗口(master)并设置了窗口的标题。接下来,我们将在这个方法中创建计算器的所有组件。
创建计算器组件
计算器的GUI组件包括一个显示计算结果的文本框和多个按钮,用于输入数字和执行算术操作。
class CalculatorGUI:
def __init__(self, master):
self.master = master
master.title("简易计算器")
# 显示计算结果的文本框
self.result_var = tk.StringVar()
self.result_var.set("")
self.result_label = tk.Label(master, textvariable=self.result_var, font=('Arial', 20))
self.result_label.grid(row=0, column=0, columnspan=4, pady=5)
# 创建数字按钮
for i in range(10):
# ...
# 创建运算符按钮
self.add_btn = tk.Button(master, text="+", width=4, height=2, command=lambda: self.add_operator("+"))
self.add_btn.grid(row=1, column=3, padx=5, pady=5)
self.subtract_btn = tk.Button(master, text="-", width=4, height=2, command=lambda: self.add_operator("-"))
self.subtract_btn.grid(row=2, column=3, padx=5, pady=5)
self.multiply_btn = tk.Button(master, text="*", width=4, height=2, command=lambda: self.add_operator("*"))
self.multiply_btn.grid(row=3, column=3, padx=5, pady=5)
self.divide_btn = tk.Button(master, text="/", width=4, height=2, command=lambda: self.add_operator("/"))
self.divide_btn.grid(row=4, column=3, padx=5, pady=5)
self.equal_btn = tk.Button(master, text="=", width=4, height=2, command=self.calculate)
self.equal_btn.grid(row=5, column=3, padx=5, pady=5)
self.clear_btn = tk.Button(master, text="C", width=4, height=2, command=self.clear)
self.clear_btn.grid(row=5, column=2, padx=5, pady=5)
self.decimal_btn = tk.Button(master, text=".", width=4, height=2, command=lambda: self.add_decimal("."))
self.decimal_btn.grid(row=4, column=0, padx=5
在上面的代码中,我们创建了一个CalculatorGUI类,并在__init__方法中初始化了主窗口并设置了窗口标题。接下来,我们创建了一个result_var变量来存储计算结果,并创建了一个result_label标签来显示计算结果。我们还创建了多个数字按钮和运算符按钮,并在网格布局中将它们放置在合适的位置。
实现计算器功能
接下来,我们需要实现计算器的计算功能。在计算器GUI中,我们需要实现以下几个方法来实现计算器的功能:
•
add_digit
:将数字添加到计算器显示屏上。•
add_decimal
:将小数点添加到计算器显示屏上。•
add_operator
:将算术操作符添加到计算器显示屏上。•
calculate
:执行计算操作。•
calculate_result
:计算结果。•
clear
:清空计算器状态。
class CalculatorGUI:
def __init__(self, master):
# ...
# 将数字添加到计算器显示屏上
def add_digit(self, digit):
current_result = self.result_var.get()
self.result_var.set(current_result + str(digit))
# 将小数点添加到计算器显示屏上
def add_decimal(self, decimal):
current_result = self.result_var.get()
if "." not in current_result:
self.result_var.set(current_result + decimal)
# 将算术操作符添加到计算器显示屏上
def add_operator(self, operator):
current_result = self.result_var.get()
if self.num1 is None:
self.num1 = float(current_result)
self.operator = operator
self.result_var.set("")
else:
self.num2 = float(current_result)
self.result = self.calculate_result()
self.num1 = self.result
self.num2 = None
self.operator = operator
self.result_var.set(str(self.result))
# 执行计算
def calculate(self):
if self.num1 is None or self.operator is None:
return
current_result = self.result_var.get()
if current_result == "":
self.num2 = self.num1
else:
self.num2 = float(current_result)
self.result = self.calculate_result()
self.result_var.set(str(self.result))
self.num1 = None
self.num2 = None
self.operator = None
# 计算结果
def calculate_result(self):
if self.operator == "+":
return self.num1 + self.num2
elif self.operator == "-":
return self.num1 - self.num2
elif self.operator == "*":
return self.num1 * self.num2
elif self.operator == "/":
if self.num2 == 0:
self.result_var.set("错误:除数不能为0")
return None
else:
return self.num1 / self.num2
# 清空计算器状态
def clear(self):
self.num1 = None
self.num2 = None
self.operator = None
self.result = None
self.result_var.set("")
方法用于将数字添加到计算器的显示屏上。它通过获取当前显示结果,将其与传递的数字拼接起来,并将拼接结果设置为显示结果来实现。
add_decimal
方法用于将小数点添加到计算器的显示屏上。它通过检查当前显示结果中是否包含小数点来判断是否应该添加小数点。
add_operator
方法用于将算术操作符添加到计算器的显示屏上。它通过检查当前显示结果中是否有第一个操作数来确定应该保存哪个数字,并将显示结果设置为一个空字符串以准备输入第二个操作数。如果已经存在第一个操作数,则该方法调用calculate_result方法来计算结果,保存结果并将其显示在计算器的显示屏上。
calculate
方法用于执行计算操作。它检查是否存在第一个操作数和运算符,如果存在则检查是否输入了第二个操作数。如果未输入第二个操作数,则将第一个操作数作为第二个操作数并继续计算。否则,该方法调用calculate_result方法来计算结果并将其显示在计算器的显示屏上。
calculate_result
方法用于计算结果。它根据当前保存的操作数和运算符来执行算术操作,并返回结果。如果除数为0,则该方法将显示错误消息。
clear
方法用于清空计算器的状态。它将所有操作数、运算符和结果设置为None,并将显示结果设置为一个空字符串。
运行计算器GUI
最后,我们需要创建一个主函数来运行计算器GUI。在这个函数中,我们创建一个tkinter窗口并实例化CalculatorGUI类来显示计算器GUI。
def main():
root = tk.Tk()
CalculatorGUI(root)
root.mainloop()
if __name__ == "__main__":
main()
在这个函数中,我们创建一个Tk对象,并实例化CalculatorGUI类,将Tk对象传递给它。然后,我们调用mainloop方法来显示GUI并等待用户操作。
完整代码
import tkinter as tk
# 创建计算器界面
class CalculatorGUI:
def __init__(self, master):
self.master = master
master.title("简易计算器")
# 显示计算结果的文本框
self.result_var = tk.StringVar()
self.result_var.set("")
self.result_label = tk.Label(master, textvariable=self.result_var, font=('Arial', 20))
self.result_label.grid(row=0, column=0, columnspan=4, pady=5)
# 创建数字按钮
for i in range(10):
if i == 0:
btn = tk.Button(master, text=str(i), width=4, height=2, command=lambda num=i: self.add_digit(num))
btn.grid(row=4, column=1, padx=5, pady=5)
else:
btn = tk.Button(master, text=str(i), width=4, height=2, command=lambda num=i: self.add_digit(num))
btn.grid(row=(i-1)//3+1, column=(i-1)%3, padx=5, pady=5)
# 创建运算符按钮
self.add_btn = tk.Button(master, text="+", width=4, height=2, command=lambda: self.add_operator("+"))
self.add_btn.grid(row=1, column=3, padx=5, pady=5)
self.subtract_btn = tk.Button(master, text="-", width=4, height=2, command=lambda: self.add_operator("-"))
self.subtract_btn.grid(row=2, column=3, padx=5, pady=5)
self.multiply_btn = tk.Button(master, text="*", width=4, height=2, command=lambda: self.add_operator("*"))
self.multiply_btn.grid(row=3, column=3, padx=5, pady=5)
self.divide_btn = tk.Button(master, text="/", width=4, height=2, command=lambda: self.add_operator("/"))
self.divide_btn.grid(row=4, column=3, padx=5, pady=5)
self.equal_btn = tk.Button(master, text="=", width=25, height=2, bg="#f71",command=self.calculate)
self.equal_btn.grid(row=5, column=0, padx=0, pady=0,columnspan=5)
self.clear_btn = tk.Button(master, text="C", width=4, height=2, command=self.clear)
self.clear_btn.grid(row=4, column=2, padx=5, pady=5)
self.decimal_btn = tk.Button(master, text=".", width=4, height=2, command=lambda: self.add_decimal("."))
self.decimal_btn.grid(row=4, column=0, padx=0, pady=5)
# 初始化计算器状态
self.num1 = None
self.num2 = None
self.operator = None
self.result = None
self.reset_flag = False
# 将数字添加到计算器显示屏上
def add_digit(self, digit):
if self.reset_flag:
self.result_var.set("")
self.reset_flag = False
current_result = self.result_var.get()
self.result_var.set(current_result + str(digit))
def add_decimal(self, decimal):
if self.reset_flag:
self.result_var.set("")
self.reset_flag = False
current_result = self.result_var.get()
if "." not in current_result:
self.result_var.set(current_result + decimal)
# 添加运算符
def add_operator(self, operator):
current_result = self.result_var.get()
if self.num1 is None:
self.num1 = float(current_result)
self.operator = operator
self.result_var.set("")
else:
self.num2 = float(current_result)
self.result = self.calculate_result()
self.num1 = self.result
self.num2 = None
self.operator = operator
self.result_var.set(str(self.result))
self.reset_flag = False
# 计算结果
def calculate(self):
if self.num1 is None or self.operator is None:
return
current_result = self.result_var.get()
if current_result == "":
self.num2 = self.num1
else:
self.num2 = float(current_result)
self.result = self.calculate_result()
self.result_var.set(str(self.result))
self.num1 = None
self.num2 = None
self.operator = None
self.reset_flag = True
# 执行计算
def calculate_result(self):
if self.operator == "+":
return self.num1 + self.num2
elif self.operator == "-":
return self.num1 - self.num2
elif self.operator == "*":
return self.num1 * self.num2
elif self.operator == "/":
if self.num2 == 0:
self.result_var.set("错误:除数不能为0")
return None
else:
return self.num1 / self.num2
# 清空计算器状态
def clear(self):
self.num1 = None
self.num2 = None
self.operator = None
self.result = None
self.result_var.set("")
self.reset_flag = False
# 创建主窗口并运行计算器
root = tk.Tk()
calculator_gui = CalculatorGUI(root)
root.mainloop()
总结
在本篇文章中,我们学习了如何使用Python和tkinter模块来创建一个简单的计算器GUI。我们实现了基本的算术操作符和一些常用的功能,例如清除和小数点。我们还学习了如何在网格布局中放置组件,以及如何使用tkinter
变量来更新GUI中的显示结果。希望这篇文章能帮助您了解如何编写一个简单的计算器GUI,以及如何使用Python和tkinter模块来实现它。
分享资料,一起学习!
我是小白(微信 python1132 ) 备注 888建了个微信程序员学习群,互相解答问题,有需要的同学可以加我微信进群。
戳原文👇纯免费,在线学编程~