需求
使用python的tkinter库实现简单的加减乘除计算器程序,并展示界面
程序效果
代码实现
import tkinter as tk
class Calculator:
def __init__(self, master):
self.master = master
master.title("计算器")
# 创建显示屏
self.display = tk.Entry(master, width=20, font=('Arial', 20), justify='right')
self.display.grid(row=0, column=0, columnspan=4)
# 定义按钮
buttons = [
('7', 1, 0), ('8', 1, 1), ('9', 1, 2),
('4', 2, 0), ('5', 2, 1), ('6', 2, 2),
('1', 3, 0), ('2', 3, 1), ('3', 3, 2),
('0', 4, 1),
('+', 1, 3), ('-', 2, 3), ('*', 3, 3), ('/', 4, 3),
('=', 4, 2), ('C', 4, 0), ('<-', 5, 0)
]
for (text, row, col) in buttons:
button = tk.Button(master, text=text, width=5, height=2, command=lambda t=text: self.on_button_click(t))
button.grid(row=row, column=col)
def on_button_click(self, char):
if char == '=':
try:
result = str(eval(self.display.get()))
self.display.delete(0, tk.END)
self.display.insert(tk.END, result)
except Exception as e:
self.display.delete(0, tk.END)
self.display.insert(tk.END, 'Error')
elif char == 'C':
self.display.delete(0, tk.END)
elif char == '<-':
current_text = self.display.get()
self.display.delete(len(current_text) - 1)
else:
self.display.insert(tk.END, char)
if __name__ == "__main__":
root = tk.Tk()
calculator = Calculator(root)
root.mainloop()
代码说明
__init__(self, master)
: 这是Calculator
类的构造函数,用于初始化计算器的各个组件。self.master = master
: 将传入的主窗口对象赋值给self.master
,以便在其他方法中使用。master.title("计算器")
: 设置主窗口的标题为“计算器”。self.display = tk.Entry(master, width=20, font=('Arial', 20), justify='right')
: 创建一个输入框(显示屏),用于显示用户的输入和计算结果。设置宽度为 20 个字符,字体为 Arial,字号为 20,文本右对齐。self.display.grid(row=0, column=0, columnspan=4)
: 使用grid
布局管理器将显示屏放置在第 0 行,从第 0 列开始,跨 4 列。buttons
: 定义一个包含按钮信息的列表,每个元素是一个元组,包含按钮的文本、行位置和列位置。for (text, row, col) in buttons
: 遍历按钮列表,为每个按钮创建一个Button
控件,并设置其位置。button = tk.Button(master, text=text, width=5, height=2, command=lambda t=text: self.on_button_click(t))
: 创建一个按钮,设置按钮的文本、宽度、高度,并绑定点击事件到on_button_click
方法。button.grid(row=row, column=col)
: 使用grid
布局管理器将按钮放置在指定的位置。
on_button_click(self, char)
: 这个方法用于处理按钮点击事件。if char == '='
: 如果点击的是等号按钮,尝试计算显示屏中的表达式。result = str(eval(self.display.get()))
: 使用eval
函数计算显示屏中的表达式,并将结果转换为字符串。self.display.delete(0, tk.END)
: 清空显示屏。self.display.insert(tk.END, result)
: 将计算结果显示在显示屏上。
elif char == 'C'
: 如果点击的是清除按钮,清空显示屏。self.display.delete(0, tk.END)
: 清空显示屏。
elif char == '<-'
: 如果点击的是删除按钮,删除显示屏中最后一个字符。current_text = self.display.get()
: 获取当前显示屏中的文本。self.display.delete(len(current_text) - 1)
: 删除最后一个字符。
else
: 对于其他按钮,将按钮上的字符添加到显示屏中。self.display.insert(tk.END, char)
: 将字符添加到显示屏的末尾。