要使用Python的Tkinter库构建一个简单的计算器,需要完成以下步骤:
- 导入Tkinter模块及其子模块
- 创建窗口顶层对象
- 在顶层对象中创建计算器输入和输出文本框、数字和运算符按钮等控件
- 安排控件的布局和位置
- 编写事件处理函数,实现计算器的基本逻辑
- 绑定控件的事件与对应的事件处理函数
- 进入Tkinter事件循环,等待用户输入和操作
下面是一个简单的示例代码,该计算器支持加、减、乘、除四则运算:
import tkinter as tk
def calculate():
try:
result = eval(entry.get())
output.configure(text=str(result))
except:
output.configure(text="Error")
def add_char(char):
entry.insert(tk.END, char)
def clear():
entry.delete(0, tk.END)
output.configure(text="")
root = tk.Tk()
root.title("Calculator")
# 创建输入和输出控件
entry = tk.Entry(root, width=20, font="Courier 20")
output = tk.Label(root, width=20, font="Courier 20")
# 创建数字和运算符按钮控件
buttons = [
tk.Button(root, text=str(i), width=5, font="Courier 20", command=lambda i=i: add_char(str(i)))
for i in range(10)
]
op_buttons = [
tk.Button(root, text=op, width=5, font="Courier 20", command=lambda op=op: add_char(op))
for op in ["+", "-", "*", "/"]
]
# 创建清空和计算按钮
clear_button = tk.Button(root, text="C", width=2, font="Courier 20", command=clear)
equal_button = tk.Button(root, text="=", width=2, font="Courier 20", command=calculate)
# 安排控件的布局和位置
entry.grid(row=0, column=0, columnspan=4, padx=5, pady=5)
output.grid(row=1, column=0, columnspan=4, padx=5, pady=5)
for i in range(10):
buttons[i].grid(row=2 + i//3, column=i % 3, padx=5, pady=5)
for i, op_button in enumerate(op_buttons):
op_button.grid(row=2 + i, column=3, padx=5, pady=5)
clear_button.grid(row=5, column=0, padx=5, pady=5)
equal_button.grid(row=5, column=3, padx=5, pady=5)
# 进入Tkinter事件循环
root.mainloop()
在这个代码中,首先导入了Tkinter库。然后,创建了一个Tkinter窗口顶层对象root
,并设置了窗口标题为“Calculator”。
接着,分别创建了一个输入文本框entry
和一个输出标签output
,用于显示用户输入的表达式和计算结果。还创建了数字和运算符的按钮控件buttons
和op_buttons
,用于触发相应的事件。
接下来,根据按钮的功能分别定义了三个事件处理函数。add_char()
函数用于在输入文本框中添加数字和运算符,clear()
函数用于清空输入文本框和输出标签的内容,calculate()
函数用于计算表达式并将结果显示在输出标签中。
然后,通过grid()
函数安排各个控件的位置和大小。最后,使用mainloop()
函数进入Tkinter的事件处理循环,等待用户的输入和操作。
另一个示例是使用ttk
(Tkinter Theme Widget)模块创建了一个带有calc菜单、按钮、输入框、运算符、等于和清空键的计算器。以下是代码:
import tkinter as tk
from tkinter import ttk
def calculate():
try:
result = eval(entry.get())
output.configure(text=str(result))
except:
output.configure(text="Error")
def add_char(char):
entry.insert(tk.END, char)
def clear():
entry.delete(0, tk.END)
output.configure(text="")
# Step 1: Create the window
root = tk.Tk()
root.title("Calculator")
# Step 2: Create the menu bar
menubar = tk.Menu(root)
root.config(menu=menubar)
# Step 3: Create the widgets
frame = ttk.Frame(root, padding="3 3 12 12")
frame.grid(column=0, row=0, sticky=(tk.N, tk.W, tk.E, tk.S))
frame.columnconfigure(0, weight=1)
frame.rowconfigure(0, weight=1)
entry = ttk.Entry(frame, font=('Courier', 14), width=15)
entry.grid(column=0, row=0, sticky=(tk.W, tk.E))
buttons = [
ttk.Button(frame, text=str(i), width=5, command=lambda i=i: add_char(str(i)))
for i in range(10)
]
op_buttons = [
ttk.Button(frame, text=op, width=5, command=lambda op=op: add_char(op))
for op in ["+", "-", "*", "/"]
]
clear_button = ttk.Button(frame, text="C", width=5, command=clear)
equal_button = ttk.Button(frame, text="=", width=5, command=calculate)
output = ttk.Label(frame, text="", font=('Courier', 14))
# Step 4: Layout the widgets
entry.grid(column=0, row=0, sticky=(tk.E, tk.W))
for i in range(0, 9):
buttons[i].grid(column=i%3, row=i//3+1, sticky=(tk.W, tk.E))
buttons[9].grid(column=1, row=4, sticky=(tk.W, tk.E))
op_buttons[0].grid(column=3, row=1, sticky=(tk.W, tk.E))
op_buttons[1].grid(column=3, row=2, sticky=(tk.W, tk.E))
op_buttons[2].grid(column=3, row=3, sticky=(tk.W, tk.E))
op_buttons[3].grid(column=3, row=4, sticky=(tk.W, tk.E))
clear_button.grid(column=0, row=4, sticky=(tk.W, tk.E))
equal_button.grid(column=2, row=4, sticky=(tk.W, tk.E))
output.grid(column=0, row=5, columnspan=4, sticky=(tk.W, tk.E))
# Step 5: Create the menus
calc_menu = tk.Menu(menubar, tearoff=0)
calc_menu.add_command(label="Quit", command=root.quit)
menubar.add_cascade(label="Calc", menu=calc_menu)
# Step 6: Add the events
root.bind("<Return>", calculate)
root.bind("<KP_Enter>", calculate)
# Step 7: Enter the event loop
root.mainloop()
这份代码使用ttk
模块创建了一些增强的控件,例如使用ttk.Frame
代替了原始窗口顶层对象。除此之外,还创建了计算器的菜单栏menubar
、数字和运算符按钮控件buttons
和op_buttons
、清空和计算按钮控件,以及一个输出标签控件output
。在计算器的菜单栏中添加了一个名称为“Quit”的选项,用于退出应用程序。
计算器的逻辑与上一个示例相同,仅在界面布局和控件样式上有所不同。在这个示例代码中,计算器的按钮使用了ttk.Button
控件,使按键外观更美观且完全可定制。
总之,使用Python的Tkinter库可以轻松编写出一个简单且实用的计算器,它可以用于各种小型项目中。在这个过程中,需要掌握Tkinter库的控件和布局相关知识,以及相应的事件处理函数的编写方法。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:如何利用python的tkinter实现一个简单的计算器 - Python技术站