目录
1.介绍
随着人们对健康的关注度不断提高,BMI(Body Mass Index,身体质量指数)指数计算器越来越受到广泛关注。BMI指数可以反映出一个人的体重是否与身高相适应,从而评估一个人的身体健康状况。本文将介绍如何使用Python Tkinter库实现一个简单的BMI指数计算器。
你还可以访问我的主页查看其他文章:
2.技术介绍
tkinter
Tkinter是Python的标准GUI库,全称为Tk interface,简称为Tk。它提供了Python程序中用于创建GUI应用程序的接口。
Tkinter模块(“Tk 接口”)是Python的标准Tk GUI工具包的接口。本质上,Tkinter是对Tcl/Tk软件包的Python接口封装,这使得Python程序员能够轻松地创建和管理GUI元素。它是Python自带的标准库模块,当您安装好Python后,就可以直接使用它,而无须另行安装。
使用Tkinter,您可以创建窗口、下拉菜单、对话框、按钮等GUI组件。这些组件可以组成复杂的用户界面,以实现与用户的交互。
此外,Tkinter还支持各种布局管理器,如grid、pack和place等,可以帮助您轻松地控制各个组件的位置和大小,使您的GUI应用程序看起来更加美观、易于使用。
与其他编程语言的GUI工具包相比,Tkinter编码效率高,能够实现快速开发的目的,非常适合初学者学习。但需要注意的是,Tkinter在某些方面的功能可能不如其他一些更专业的GUI库(如Qt)强大。例如,它的性能和功能丰富程度可能不及一些更高级的GUI工具包。因此,它更适合开发一些简单的程序,如计算器的界面或者一个简易的聊天窗口等。
总的来说,Tkinter是一个功能强大、易于使用且广泛应用的Python GUI库,可以帮助您轻松地创建和管理GUI应用程序。
3.设计思路
(1)设计界面
首先,我们需要使用Tkinter库创建一个用户界面,包括输入和输出部分。在输入部分,我们需要创建两个文本框,一个用于输入身高(单位:米),另一个用于输入体重(单位:千克)。在输出部分,我们需要显示BMI指数及其健康状况评级。
(2)实现计算功能
接下来,我们需要实现计算功能。当用户在文本框中输入身高和体重后,程序将自动计算BMI指数,并根据BMI值给出相应的健康状况评级。我们可以使用以下公式来计算BMI指数:BMI = 体重(kg)/ 身高(m)的平方。然后根据BMI值的不同范围,给出不同的健康状况评级(如正常、超重、肥胖、过轻等),不同的健康状况评级将根据健康状况使用不同的颜色显示。
(3)添加按钮功能
为了让用户能够方便地执行计算操作,我们需要添加一个按钮。当用户点击该按钮时,程序将自动获取用户在文本框中输入的身高和体重值,并计算出BMI指数和健康状况评级。然后,将这些结果显示在输出部分。
4.系统源码
源码里注释的非常详细,相信聪明的你一定很容易理解源码内容!
calculate_bmi.py:
import tkinter as tk
from tkinter import messagebox
class BMI():
def __init__(self):
self.font_style = {"TkDefaultFont 12 bold"} # 字体样式
# BMI指数计算函数
def calculate_bmi(self):
try:
height = float(height_entry.get())/100 # 获取输入框数据
if height <= 0:
height_entry.delete(0, 'end') # 清空输入框
messagebox.showerror("身高数据错误", "身高不得小于或等于0!!")
except ValueError:
height_entry.delete(0, 'end') # 清空输入框
messagebox.showerror("身高数据格式错误","请检查你是否输入了正确的数字?")
try:
weight = float(weight_entry.get()) # 获取输入框数据
if weight <=0 :
weight_entry.delete(0, 'end') # 清空输入框
messagebox.showerror("体重数据错误", "体重不得小于或等于0!!")
except ValueError:
weight_entry.delete(0, 'end') # 清空输入框
# 弹出错误提示框
messagebox.showerror("体重数据格式错误","请检查你是否输入了正确的数字?")
try:
bmi = round((weight / (height ** 2)), 2) # BMI计算公式
result_label_right.config(text=f"{bmi}") # 将计算出的BMI指数配置给result_label_right
if bmi < 18.5:
remind_label.config(text="您的体重过轻。\n需增加营养。", fg="#FF8C00") # 深橙色字体提示
elif 18.5 <= bmi < 24:
remind_label.config(text="您的体重正常。", fg="#008000") # 绿色字体提示
elif 24 <= bmi < 28:
remind_label.config(text="您的体重过重。\n需注意控制饮食,减肥。", fg="#FF8C00") # 深橙色字体提示
else:
remind_label.config(text="您的体重肥胖。\n需严格控制饮食,尽快减肥。", fg="#FF0000") # 红色字体提示
except Exception as e:
pass
if __name__ == '__main__':
# 创建一个Tkinter窗口,这是所有GUI应用程序的根元素
root = tk.Tk()
# 设置窗口的大小,这里的"400x300"表示窗口的宽度为400像素,高度为300像素
root.geometry("400x300")
# 设置窗口的标题,这将显示在窗口的左上角
root.title("BMI指数计算器")
# 创建一个字体样式对象,这里设置了一种12磅的粗体字体
font_style = {"TkDefaultFont 12 bold"}
# 创建一个框架,框架是用来组织和布局小部件(如按钮、标签等)的容器
frame1 = tk.Frame(root)
# 将框架添加到主窗口中
frame1.pack()
# 在frame1中添加一个标签和一个输入框,用于接收用户输入的身高信息
# 标签指示用户输入身高信息,输入框用于接收用户输入的数据
# grid方法用于在网格中定位小部件,row和column参数指定了小部件的位置,"pady"参数用于设置垂直填充(间距)
# 使用font参数设置字体样式,这里使用了之前定义的字体样式对象
height_label = tk.Label(frame1, text="身高(CM):", font=font_style)
height_entry = tk.Entry(frame1, font=font_style)
height_label.grid(row=0, column=0, pady=10)
height_entry.grid(row=0, column=1, pady=10)
# 添加一个标签和一个输入框,用于接收用户输入的体重信息
weight_label = tk.Label(frame1, text="体重(KG):", font=font_style)
weight_entry = tk.Entry(frame1, font=font_style)
weight_label.grid(row=1, column=0)
weight_entry.grid(row=1, column=1)
# 创建一个按钮,当用户点击按钮时,会调用BMI类的calculate_bmi方法来计算BMI值
calculate_button = tk.Button(root, text="计算BMI", command=BMI().calculate_bmi)
# 通过config方法设置按钮的样式,"height"和"width"参数用于设置按钮的高度和宽度,"bg"和"fg"参数用于设置按钮的背景色和前景色(文字颜色)
calculate_button.config(height=2, width=18, bg="#1E90FF", fg='white', font=font_style)
# 将按钮添加到主窗口中,"pady"参数用于设置垂直填充(间距)
calculate_button.pack(pady=10)
# 创建另一个框架,用于显示计算结果和提醒信息
frame2 = tk.Frame(root)
# 将框架添加到主窗口中
frame2.pack()
# 在frame2中创建一个标签,用于显示计算结果,初始值为空字符串
result_label_left = tk.Label(frame2, text="")
# 通过config方法设置标签的样式,"text"参数用于设置标签的内容,"font"参数用于设置字体样式,"relief"参数用于设置边框样式,"height"和"width"参数用于设置高度和宽度
result_label_left.config(text=f"您的BMI指数:", font=font_style, relief=tk.GROOVE, height=2,
width=19) # 设置输出结果的字体为粗体
result_label_right = tk.Label(frame2, text="0.00") # 在frame2中创建另一个标签,用于显示计算结果的数值部分初始值为0.00
# 设置result_label_right的字体样式为之前定义的font_style,字体颜色为绿色
result_label_right.config(font=font_style, fg='green',
relief=tk.GROOVE, height=2, width=10)
# 将result_label_left放置在frame2的第0行第0列,即左上角位置
result_label_left.grid(row=0, column=0)
# 将result_label_right放置在frame2的第0行第1列,即右上角位置
result_label_right.grid(row=0, column=1)
# 创建一个新的标签提醒_label,放置在root窗口中,初始文本为空
remind_label = tk.Label(root, text="")
# 设置提醒_label的字体样式为之前定义的font_style,边框样式为GROOVE,高度为4行,宽度为30个字符
remind_label.config(font=font_style, relief=tk.GROOVE, height=4, width=30)
# 将提醒_label添加到主窗口中
remind_label.pack()
# 运行主窗口
root.mainloop()