赞
踩
目录
随着人们对健康的关注度不断提高,BMI(Body Mass Index,身体质量指数)指数计算器越来越受到广泛关注。BMI指数可以反映出一个人的体重是否与身高相适应,从而评估一个人的身体健康状况。本文将介绍如何使用Python Tkinter库实现一个简单的BMI指数计算器。
你还可以访问我的主页查看其他文章:
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应用程序。
首先,我们需要使用Tkinter库创建一个用户界面,包括输入和输出部分。在输入部分,我们需要创建两个文本框,一个用于输入身高(单位:米),另一个用于输入体重(单位:千克)。在输出部分,我们需要显示BMI指数及其健康状况评级。
接下来,我们需要实现计算功能。当用户在文本框中输入身高和体重后,程序将自动计算BMI指数,并根据BMI值给出相应的健康状况评级。我们可以使用以下公式来计算BMI指数:BMI = 体重(kg)/ 身高(m)的平方。然后根据BMI值的不同范围,给出不同的健康状况评级(如正常、超重、肥胖、过轻等),不同的健康状况评级将根据健康状况使用不同的颜色显示。
为了让用户能够方便地执行计算操作,我们需要添加一个按钮。当用户点击该按钮时,程序将自动获取用户在文本框中输入的身高和体重值,并计算出BMI指数和健康状况评级。然后,将这些结果显示在输出部分。
源码里注释的非常详细,相信聪明的你一定很容易理解源码内容!
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()
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。