Tkinter库的学习历程:设计一个计算圆面积的GUI界面
4 min read
Page Views
1.问题引入
现需要设计一个计算圆面积的GUI界面,有输入框和输出框、清除按钮和计算按钮,需要判断用户输入的内容为正数,不能是负数、中英文或者其他字符,输入内容不符时,需有弹窗加以提醒。
2.python程序
import tkinter as tk
import math
from tkinter import messagebox
"""
tkinter: Tk 8.6
math: built-in (Python 3.8.10)
"""
class CircleAreaCalculator:
def __init__(self, master):
self.master = master
master.title('计算圆面积')
master.geometry('350x100')
master.resizable(False, False)
self.setup_ui()
def setup_ui(self):
"""初始化用户界面组件"""
# 输入半径部分
self.radius_label = tk.Label(self.master, text="请输入圆半径:")
self.radius_label.grid(row=0, column=0)
self.radius_label.bind('<Enter>', self.change_color)
self.radius_label.bind('<Leave>', self.back_color)
self.radius_var = tk.StringVar(value='0')
self.radius_entry = tk.Entry(
self.master,
textvariable=self.radius_var,
width=20,
justify=tk.RIGHT,
selectbackground='cyan',
selectforeground='purple',
validate="key",
validatecommand=(self.master.register(self.validate_input), '%P')
)
self.radius_entry.grid(row=0, column=1)
# 显示面积部分
self.area_label = tk.Label(self.master, text="圆面积为:")
self.area_label.grid(row=1, column=0)
self.area_label.bind('<Enter>', self.change_color)
self.area_label.bind('<Leave>', self.back_color)
self.area_var = tk.StringVar()
self.area_entry = tk.Entry(
self.master,
textvariable=self.area_var,
width=20,
justify=tk.RIGHT,
selectbackground='yellow',
selectforeground='red'
)
self.area_entry.grid(row=1, column=1)
# 按钮
self.clear_btn = tk.Button(
self.master,
text="清除",
command=self.clear_fields,
fg='red'
)
self.clear_btn.place(x=75, y=60)
self.calc_btn = tk.Button(
self.master,
text="计算",
command=self.calculate,
fg='blue'
)
self.calc_btn.place(x=150, y=60)
# 图片装饰
try:
self.img = tk.PhotoImage(file='./图片.gif')
tk.Label(self.master, image=self.img).place(x=250, y=10)
except:
pass
# 绑定事件
self.clear_btn.bind('<Button-1>', self.recover_calculate)
def validate_input(self, new_value):
"""验证输入是否为有效正数"""
try:
if new_value == "":
return True
value = float(new_value)
return value > 0
except ValueError:
return False
def calculate(self):
"""计算圆面积"""
try:
radius = float(self.radius_var.get())
if radius <= 0:
messagebox.showerror("错误", "半径必须是正数")
return
area = math.pi * radius ** 2
self.area_entry.delete(0, tk.END)
self.area_entry.insert(tk.END, str(round(area, 2)))
self.calc_btn.configure(state='disable')
except ValueError:
messagebox.showerror("错误", "请输入有效的数字")
def clear_fields(self):
"""清除输入和结果"""
self.radius_entry.delete(0, tk.END)
self.area_entry.delete(0, tk.END)
def recover_calculate(self, event):
"""恢复计算按钮功能"""
event.widget = self.calc_btn.configure(state='normal')
def change_color(self, event):
"""鼠标悬停改变标签颜色"""
event.widget['fg'] = 'green'
def back_color(self, event):
"""鼠标离开恢复标签颜色"""
event.widget['fg'] = 'black'
if __name__ == "__main__":
root = tk.Tk()
app = CircleAreaCalculator(root)
root.mainloop()
3.效果展示


Last updated on 2025-05-08