国家喊你来减肥
2023年《中国居民营养与慢性病状况报告》指出,中国成年人超重率高达50.7%,肥胖问题已成为威胁国民健康的重要隐患。–AI生成不知对不对
国家卫健委多次倡导全民关注体重管理,而BMI(身体质量指数)正是衡量健康体态的核心指标。今天,我们将用Python和PySide2打造一款智能BMI计算器,用科技为健康赋能!
文末附完整源码以及打包的Exe,代码由AI一键生成,敲要求到生成运行就分分钟不到就有这个效果,现在AI太牛掰了吧!先来看效果图如下:
一、你的AI健康管家:BMI计算器
这款工具不仅快速计算BMI值,还能:
✅ 智能分析健康等级(偏瘦/标准/超重/肥胖)
✅ 动态变色预警(绿色健康→红色警示)
✅ 生成个性化健康建议
✅ 主题切换亮暗
二、技术亮点:PySide2实现
使用Qt框架的Python绑定库PySide2,只需百来行代码即可实现:
- 人性化交互:扁平化UI设计 + 智能输入校验
- 动态反馈:根据BMI值实时变色
- 扩展性强:支持后续接入健康数据库
三、源码实现(附详细注释)
import sys
import os
from PySide2.QtWidgets import (QApplication, QWidget, QVBoxLayout, QHBoxLayout,
QLabel, QLineEdit, QPushButton, QFrame, QSizePolicy)
from PySide2.QtCore import Qt, QFile
from PySide2.QtGui import QDoubleValidator, QFont, QColor, QPalette
class BMICalculator(QWidget):
def __init__(self):
super().__init__()
self.themes = ["themes/light.qss", "themes/dark.qss"]
self.current_theme = 0
self.initUI()
self.load_stylesheet()
def initUI(self):
# 主布局
main_layout = QVBoxLayout()
main_layout.setSpacing(20)
main_layout.setContentsMargins(30, 30, 30, 30)
# 主题切换按钮
self.theme_btn = QPushButton("🌓 切换主题")
self.theme_btn.setObjectName("theme_btn")
self.theme_btn.clicked.connect(self.toggle_theme)
main_layout.addWidget(self.theme_btn, alignment=Qt.AlignRight)
# 标题
title = QLabel("""<div style='text-align: center;'>
<h1 style='color: #2ecc71; margin-bottom: 5px;'>全民健康BMI计算器</h1>
<p style='color: #7f8c8d; font-size: 13px;'>
响应国家卫健委号召 · 健康中国2030 · 你的AI健康管家
</p>
</div>""")
title.setAlignment(Qt.AlignCenter)
main_layout.addWidget(title)
# 输入区域
input_layout = QVBoxLayout()
input_layout.setSpacing(15)
# 身高输入
height_layout = self.create_input_field("身高 (cm):", "请输入身高", 0, 300)
self.height_input = height_layout.itemAt(1).widget()
input_layout.addLayout(height_layout)
# 体重输入
weight_layout = self.create_input_field("体重 (kg):", "请输入体重", 0, 500)
self.weight_input = weight_layout.itemAt(1).widget()
input_layout.addLayout(weight_layout)
main_layout.addLayout(input_layout)
# 计算按钮
self.calculate_btn = QPushButton("📊 AI健康评估")
self.calculate_btn.setObjectName("calculate_btn")
self.calculate_btn.clicked.connect(self.calculate_bmi)
main_layout.addWidget(self.calculate_btn)
# 分隔线
separator = QFrame()
separator.setFrameShape(QFrame.HLine)
separator.setStyleSheet("color: #bdc3c7;")
main_layout.addWidget(separator)
# 结果展示
self.result_container = QVBoxLayout()
self.result_container.setSpacing(15)
self.result_label = QLabel("等待评估...")
self.result_label.setObjectName("result_label")
self.result_label.setAlignment(Qt.AlignCenter)
self.advice_label = QLabel()
self.advice_label.setWordWrap(True)
self.advice_label.setAlignment(Qt.AlignCenter)
self.advice_label.hide()
self.result_container.addWidget(self.result_label)
self.result_container.addWidget(self.advice_label)
main_layout.addLayout(self.result_container)
self.setLayout(main_layout)
self.setWindowTitle("AI健康管家 - BMI计算器")
self.resize(420, 500)
def create_input_field(self, label_text, placeholder, min_val, max_val):
"""创建标准化输入框"""
layout = QHBoxLayout()
label = QLabel(label_text)
label.setFixedWidth(80)
input_field = QLineEdit()
input_field.setPlaceholderText(placeholder)
input_field.setValidator(QDoubleValidator(min_val, max_val, 2))
input_field.setClearButtonEnabled(True)
layout.addWidget(label)
layout.addWidget(input_field)
return layout
def calculate_bmi(self):
"""计算BMI并显示结果"""
try:
height = float(self.height_input.text()) / 100 # 转换为米
weight = float(self.weight_input.text())
bmi = weight / (height ** 2)
self.show_result(bmi)
except:
self.result_label.setText("⚠️ 请输入有效数值!")
self.advice_label.hide()
def show_result(self, bmi):
"""显示带动态样式的完整结果"""
status, color, advice = self.get_bmi_status(bmi)
# 动态颜色设置
palette = self.result_label.palette()
palette.setColor(QPalette.WindowText, QColor(color))
self.result_label.setPalette(palette)
self.result_label.setText(
f"<b>BMI评估结果:{bmi:.1f}</b>\n"
f"<span style='font-size: 16px;'>{status}</span>"
)
self.advice_label.setText(
f"<div style='color: {color};'>"
f"🏅 健康建议:{advice}</div>"
)
self.advice_label.show()
def get_bmi_status(self, bmi):
"""根据BMI值返回状态信息"""
if bmi < 18.5:
return "体重过轻", "#3498db", "建议增加营养摄入,适量进行力量训练"
elif 18.5 <= bmi < 24:
return "健康体重", "#2ecc71", "保持良好习惯,每周至少150分钟中等强度运动"
elif 24 <= bmi < 28:
return "超重预警", "#f39c12", "控制每日热量摄入,建议进行有氧运动"
else:
return "肥胖风险", "#e74c3c", "请咨询专业医生,国家卫健委提供免费健康咨询热线:12320"
def load_stylesheet(self):
"""加载当前主题样式表"""
theme_path = os.path.join(os.path.dirname(__file__), self.themes[self.current_theme])
file = QFile(theme_path)
if file.open(QFile.ReadOnly | QFile.Text):
style = file.readAll()
self.setStyleSheet(str(style, encoding='utf-8'))
file.close()
def toggle_theme(self):
"""切换主题"""
self.current_theme = (self.current_theme + 1) % len(self.themes)
self.load_stylesheet()
if __name__ == "__main__":
app = QApplication(sys.argv)
window = BMICalculator()
window.show()
sys.exit(app.exec_())
四、升华:小工具大健康
这个不足百行的程序,正是"健康中国2030"的微观实践。当科技邂逅民生:
1️⃣ 个人层面:数据化健康管理,告别盲目减肥
2️⃣ 社会层面:AI工具降低健康咨询门槛
3️⃣ 国家层面:数字化手段助力公共卫生政策落地
正如钟南山院士所言:“最好的医生是自己”,让我们从计算一次BMI开始,主动拥抱健康中国新时代!
立即行动
运行代码→输入数据→查看建议→转发给关心的TA!你的每一次分享,都在推动全民健康浪潮 🌊