计算器是一种较为常用的小工具,简单的计算器有10个数字键、小数点、四则运算符、退格、删除、清零等按钮,还要有显示区以及等号按钮,按键较多,如何排列得既漂亮美观又方便实用,需要仔细进行设计。请布局方法,实现下图所示的计算器界面的布局。
import tkinter as tk
# 创建主窗口
root = tk.Tk()
root.title("简单计算器")
# 添加显示结果的文本框
result_var = tk.StringVar()
result_var.set("0")
result_display = tk.Entry(root, textvariable=result_var, font=("Arial", 20), bd=10, insertwidth=4, width=28,
justify="right")
result_display.grid(row=0, column=0, columnspan=4)
def button_click(value):
current_result = result_var.get()
if value == "BACK":
# 如果当前结果不是"0"并且不是空字符串,则删除最后一个字符
if current_result and current_result != "0":
result_var.set(current_result[:-1])
elif value == "CE":
# 清除整个输入
result_var.set("0")
elif value == "DEL":
# 删除当前输入的全部内容(不清除历史记录)
result_var.set("")
else:
# 其他正常操作
if current_result == "0":
result_var.set(value)
else:
result_var.set(current_result + value)
def clear():
result_var.set("0")
def calculate():
try:
expression = result_var.get()
result = eval(expression)
result_var.set(result)
except Exception as e:
result_var.set("错误")
# 创建按钮
button_texts = [
("CE", 1, 0), ("DEL", 1, 1), ("BACK", 1, 2), ("/", 1, 3),
("7", 2, 0), ("8", 2, 1), ("9", 2, 2), ("*", 2, 3),
("4", 3, 0), ("5", 3, 1), ("6", 3, 2), ("-", 3, 3),
("1", 4, 0), ("2", 4, 1), ("3", 4, 2), ("+", 4, 3),
("0", 5, 0), (".", 5, 1), ("=", 5, 2)
]
for (text, row, col) in button_texts:
button = tk.Button(root, text=text, font=("Arial", 20), padx=20, pady=20, width=5,
command=lambda t=text: button_click(t))
button.grid(row=row, column=col)
# 清除按钮(直接使用clear函数)
clear_button = tk.Button(root, text="CE", font=("Arial", 20), padx=20, pady=20, width=5, command=clear)
clear_button.grid(row=1, column=0)
# 等于按钮
equal_button = tk.Button(root, text="=", font=("Arial", 20), padx=20, pady=20, width=5, command=calculate)
equal_button.grid(row=5, column=2)
# 主事件循环
root.mainloop()
这段代码是一个使用Python的Tkinter库编写的简单计算器程序。下面是对每段代码的分析和作用说明:
1. 导入Tkinter库:
import tkinter as tk
这行代码导入了Python的Tkinter模块,该模块用于创建图形用户界面。
2. 创建主窗口:
root = tk.Tk()
root.title("简单计算器")
这里创建了一个Tkinter窗口实例,并将其标题设置为"简单计算器"。
3. 添加显示结果的文本框:
result_var = tk.StringVar()
result_var.set("0")
result_display = tk.Entry(root, textvariable=result_var, ...)
result_display.grid(row=0, column=0, columnspan=4)
这段代码创建了一个字符串变量`result_var`用于存储计算结果,并将其初始值设置为"0"。然后创建了一个输入框`result_display`,绑定到`result_var`变量,用于显示计算结果,并将其放置在网格的第一行,横跨四列。
4. 定义按钮点击事件处理函数:
def button_click(value):
current_result = result_var.get()
if value == "BACK":
# 如果当前结果不是"0"并且不是空字符串,则删除最后一个字符
if current_result and current_result != "0":
result_var.set(current_result[:-1])
elif value == "CE":
# 清除整个输入
result_var.set("0")
elif value == "DEL":
# 删除当前输入的全部内容(不清除历史记录)
result_var.set("")
else:
# 其他正常操作
if current_result == "0":
result_var.set(value)
else:
result_var.set(current_result + value)
这个函数定义了当按钮被点击时应该执行的操作。它根据传入的`value`参数来决定是删除字符、清除输入还是添加数字或运算符。
5. 定义清除输入的函数:
def clear():
result_var.set("0")
这个函数将结果变量`result_var`的值设置为"0",用于清除当前的输入。
6. 定义计算结果的函数:
def calculate():
try:
expression = result_var.get()
result = eval(expression)
result_var.set(result)
except Exception as e:
result_var.set("错误")
这个函数尝试计算当前显示在`result_display`中的表达式,并将结果显示在输入框中。如果表达式无效,会显示"错误"。
7. 创建按钮的文本和布局列表:
button_texts = [
("CE", 1, 0), ("DEL", 1, 1), ("BACK", 1, 2), ("/", 1, 3),
("7", 2, 0), ("8", 2, 1), ("9", 2, 2), ("*", 2, 3),
("4", 3, 0), ("5", 3, 1), ("6", 3, 2), ("-", 3, 3),
("1", 4, 0), ("2", 4, 1), ("3", 4, 2), ("+", 4, 3),
("0", 5, 0), (".", 5, 1), ("=", 5, 2)
]
这里定义了一个列表,包含了计算器按钮的文本和它们在网格布局中的位置。
8. 循环创建按钮并放置到主窗口:
for (text, row, col) in button_texts:
button = tk.Button(root, text=text, font=("Arial", 20), padx=20, pady=20, width=5,
command=lambda t=text: button_click(t))
button.grid(row=row, column=col)
这个循环遍历`button_texts`列表,为每个按钮创建一个Tkinter按钮,并将其放置在指定的网格位置。
9. 创建清除按钮:
clear_button = tk.Button(root, text="CE", font=("Arial", 20), padx=20, pady=20, width=5, command=clear)
clear_button.grid(row=1, column=0)
这行代码创建了一个清除按钮,并将其放置在网格的第二行第一列。点击这个按钮会调用`clear`函数。
10. 创建等于按钮:
equal_button = tk.Button(root, text="=", font=("Arial", 20), padx=20, pady=20, width=5, command=calculate)
equal_button.grid(row=5, column=2)
这行代码创建了一个等于按钮,并将其放置在网格的第六行第三列。点击这个按钮会调用`calculate`函数。
11. 主事件循环:
root.mainloop()
这行代码启动了Tkinter的主事件循环,使得窗口能够响应用户的输入和操作。
整个程序是一个简单的图形界面计算器,用户可以通过点击按钮输入数字和运算符,然后点击等号按钮来计算结果。
不足:由于能力不足,目前还不能将“=”跨两个格子,望大家多多指正