背景
很多个人健康管理工具功能很全,但也因此显得复杂。对于日常使用来说,真正需要的往往不是一套专业营养系统,而是一个能快速记录、方便回看、能给出一点提醒的小工具。
这个项目的出发点很朴素:记录每天的早餐、中餐、晚餐,再结合睡眠和锻炼情况,帮助自己观察生活习惯。比如早餐常吃面包、三明治、鸡蛋、包子;中餐可能是蔬菜、荤菜、小荤,或者外卖;晚餐有时不吃,有时吃玉米、水果。记录方式不能太重,最好点选即可,同时又允许随时添加新内容。
因此,这个程序采用 Python 编写,界面使用 wxPython,数据保存在本地 config.json 中,既轻量,又方便打包成桌面程序。
C:\Users\86182\Desktop\早餐管理

目标
这个程序的目标主要有五个。
第一,输入要简单。常见食物、锻炼类型都做成模板,用户每天只需要勾选,不必重复打字。
第二,模板要能扩展。比如早餐新增"咖啡",晚餐新增"西瓜",锻炼新增"跳绳",都可以直接输入并添加到模板,下次继续使用。
第三,数据要持久保存。所有记录、模板和 DeepSeek API 设置都保存到 config.json,下次启动自动加载。
第四,要能做本地分析。即使不配置 AI 接口,也能根据最近 30 天记录生成基础建议。
第五,保留 AI 扩展能力。如果用户配置 DeepSeek API,就可以把最近记录交给模型,生成更自然的饮食、睡眠、锻炼综合建议。
方法
程序采用单文件结构,核心代码集中在 app.py。
整体结构可以分为几层。
第一层是配置层。程序通过 ConfigStore 负责读取、合并和保存 config.json。默认配置放在 DEFAULT_CONFIG 中,包括三餐模板、锻炼模板、记录列表和 DeepSeek 设置。
第二层是输入面板。三餐使用 MealPanel,睡眠使用 SleepPanel,锻炼使用 ExercisePanel。每个面板只关心自己的输入和输出,最后由主窗口统一保存。
第三层是主窗口。MainFrame 负责布局、日期切换、记录保存、历史刷新、分析输出和 API 设置。
第四层是分析函数。build_analysis() 根据最近 30 天数据做规则统计,例如早餐记录天数、中餐蔬菜比例、外卖频率、睡眠平均时长、锻炼累计分钟数等。
第五层是 AI 接口。build_ai_prompt() 把记录组织成中文提示词,request_deepseek() 用标准 HTTP 请求调用 DeepSeek。
这种结构的好处是清晰:界面负责输入,配置负责保存,分析函数负责输出建议,AI 调用是可选增强。
过程
程序启动时,首先确定配置文件位置。源码运行时读取 app.py 同目录下的 config.json;打包成 exe 后读取 exe 同目录下的 config.json。这个设计解决了打包后找不到原记录的问题。
配置加载由 ConfigStore.load() 完成。如果配置文件不存在,就使用默认配置。如果文件存在,就读取 JSON。随后 merge_defaults() 会把旧配置和新默认配置合并,这样即使后来新增了"睡眠""锻炼"等字段,旧记录也不会失效。
界面部分使用 wxPython 搭建。主窗口左侧是分页输入区,包含"早餐""中餐""晚餐""睡眠""锻炼"五个标签页。右侧是历史记录和综合分析。顶部是日期选择、保存按钮、分析按钮、DeepSeek 建议按钮和 API 设置按钮。
三餐输入的设计比较统一。每一餐都有一个 CheckListBox 用于勾选模板项,有一个文本框输入新内容,还有一个"添加到模板"按钮。保存时,程序会把勾选项和自定义输入合并,并去重后写入当天记录。
睡眠输入相对结构化,包括睡眠时长、睡眠质量、入睡时间、起床时间和备注。这里睡眠时长默认是 0,表示未记录,避免用户只是打开程序但没有填写睡眠时,被误算成睡了 7 小时。
锻炼输入结合了模板和数值。用户可以选择散步、快走、跑步、力量训练等类型,也可以输入新的锻炼项目。同时记录锻炼时长和强度,方便后续统计。
保存逻辑集中在 save_current_date()。它会读取所有面板的数据,组成一个以日期为 key 的记录对象,然后写入 config.json。保存后会刷新历史表格,并立即重新生成分析结果。
分析逻辑集中在 build_analysis()。它先取最近 30 天记录,再计算多个指标:早餐、中餐、晚餐记录天数,外卖天数,蔬菜天数,蛋类次数,晚餐不吃次数,平均睡眠时长,较差睡眠天数,锻炼天数和累计锻炼分钟数。然后根据这些指标生成建议。
例如:
- 如果中餐蔬菜比例偏低,建议把"蔬菜 + 荤菜/小荤"作为默认组合。
- 如果外卖频率偏高,建议优先选择少油、带蔬菜、主食不过量的组合。
- 如果平均睡眠不足 6.5 小时,建议先把目标定为每晚增加 30 分钟。
- 如果锻炼频率偏低,建议从每周 3 次、每次 20 分钟开始。
- 如果既有锻炼记录又有睡眠质量波动,建议对比锻炼日和非锻炼日的睡眠差异。
DeepSeek 功能是可选的。用户在 API 设置中填写 API Key 后,点击"DeepSeek建议",程序会先保存当天记录,然后调用接口。提示词会明确要求模型给出温和、可执行、不夸张的建议,并且不要做医学诊断。
结果
最终程序实现了一个轻量的个人健康记录工具。
它支持三餐、睡眠、锻炼三类生活数据。输入方式以点选为主,适合每天快速记录;同时支持自定义内容,避免模板太死板。所有数据都保存在本地 config.json,透明、可备份,也方便用 Python 进一步分析。
程序还支持历史回看。双击历史记录中的某一天,可以重新加载当天内容。分析区域会根据最近记录自动更新,帮助用户看到近期饮食、睡眠和锻炼习惯。
在工程层面,这个程序也处理了一个很实际的问题:源码运行和 exe 运行时配置文件路径不同。通过判断 sys.frozen,程序可以在打包后读取 exe 同目录的配置文件,并在界面底部显示当前配置路径,降低排查成本。
总结
这个项目的价值不在于算法复杂,而在于它把个人健康记录这件小事做得足够顺手。
它的设计思路可以概括为:用模板降低输入成本,用 JSON 保证数据可控,用本地规则提供即时反馈,用 DeepSeek 作为可选增强。
从代码结构看,程序拆分得比较清楚:ConfigStore 管配置,多个 Panel 管输入,MainFrame 管界面流程,build_analysis() 管本地建议,request_deepseek() 管 AI 接口。这样的结构虽然简单,但已经足够支撑一个个人桌面工具的持续迭代。
后续如果继续扩展,可以考虑增加图表、月度统计、CSV 导出、体重记录、饮水记录,以及更细的睡眠和运动趋势分析。当前版本已经完成了一个实用基础:每天点几下,保存下来,慢慢看见自己的生活模式。