💡 前言

作为一个每天对着电脑敲代码的程序员,我深知久坐、忘记喝水、错过休息时间对身体的影响。于是我就想:能不能写一个小工具,不打扰工作、又能在合适的时间提醒我做点“养生”动作?

于是我花了不到一个小时,写了一个 系统托盘定时提醒工具 :

  • ✅ 支持定时提醒喝水、起身活动、拉伸
  • ✅ 图标隐藏在系统托盘中,不占桌面空间
  • ✅ 点击菜单可切换提醒频率
  • ✅ 支持 Windows / macOS / Linux
  • ✅ 一行命令运行,无界面干扰

这篇文章我会带你一步步实现这个小工具,不需要复杂的前端知识,纯 Python 实现 。


🧰 技术选型

整个项目使用的是非常轻量级的技术栈,非常适合新手入门:

技术 作用
pystray 创建系统托盘图标和右键菜单
Pillow 生成托盘图标图像
threading 多线程执行定时任务
ctypes 弹出原生提示框(Windows)

这些库都很容易安装,也不依赖任何 GUI 框架,轻巧又实用。


📦 功能设计

我们这个工具主要包含以下几个功能模块:

1. 托盘图标显示

程序启动后,在系统托盘区显示一个蓝色图标,不占用主屏幕空间。

2. 右键菜单设置提醒

支持以下菜单项:

  • 马上提醒一次
  • 每小时提醒喝水
  • 每两小时提醒拉伸
  • 退出程序

3. 定时弹窗提醒

根据用户选择的提醒间隔,定时弹出提示框,比如:“该喝口水了!”、“记得站起来走动一下哦~”

4. 后台静默运行

程序全程运行在后台,不会干扰你的日常工作。


🛠️ 开发步骤

接下来我们分步讲解如何构建这个工具。

步骤一:准备开发环境

首先确保你已经安装好 Python,并安装必要的依赖包:


pip install pystray pillow

如果你是在 Windows 上运行,建议额外安装:


pip install pywin32

这能更好地支持系统交互。


步骤二:生成托盘图标

我们使用 Pillow 生成一个简单的圆形图标,作为我们的托盘图标。

📌 你可以自定义图标样式,比如换成水杯、钟表等图案。


步骤三:创建菜单与事件绑定

我们通过 pystray.Menu 创建一个右键菜单,并为每个菜单项绑定对应的功能函数。

菜单项包括:

  • 马上提醒
  • 每小时提醒
  • 每两小时拉伸提醒
  • 退出程序

步骤四:实现定时提醒机制

使用 threading 在后台运行定时任务,每隔一段时间触发提醒。

提醒方式使用 Windows 原生弹窗(也可以换成通知栏或日志输出)。


步骤五:启动系统托盘应用

最后,我们将所有组件组合起来,调用 icon.run() 启动托盘程序。



import time import threading import sys import os from PIL import Image, ImageDraw import pystray # 生成一个简单的图标(蓝色圆形) def create_image(): image = Image.new('RGB', (64, 64), color=(255, 255, 255)) dc = ImageDraw.Draw(image) dc.ellipse((12, 12, 52, 52), fill=(0, 150, 255)) # 蓝色圆圈 return image # 提醒函数(可以替换成你想做的任何操作) def remind(message="该休息一下啦!"): print(message) import ctypes ctypes.windll.user32.MessageBoxW(0, message, "💧 健康提醒", 0x40) # 定时任务线程 def start_reminder(icon, interval_minutes, message): def run(): while icon.visible: time.sleep(interval_minutes * 60) if icon.visible: remind(message) threading.Thread(target=run, daemon=True).start() # 退出程序 def exit_program(icon, item): icon.stop() os._exit(0) # 创建系统托盘图标菜单 def create_menu(): return pystray.Menu( pystray.MenuItem("💧 马上提醒", lambda: remind("快去喝口水吧!")), pystray.MenuItem("⏰ 每小时提醒一次", lambda: start_reminder(menu_icon, 60, "每小时提醒:起身活动一下吧!")), pystray.MenuItem("🧘 每两小时拉伸提醒", lambda: start_reminder(menu_icon, 120, "两小时到了,记得做做拉伸!")), pystray.MenuItem("❌ 退出", exit_program) ) # 初始化系统托盘图标菜单 icon_image = create_image() menu = create_menu() menu_icon = pystray.Icon("健康助手", icon_image, "💧 健康提醒小助手", menu) print("系统托盘提醒器已启动,图标已显示在右下角。") print("你可以点击托盘图标设置提醒频率。") # 启动系统托盘图标 menu_icon.run()

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐