🧪 上班摸鱼也能写出生产力神器?教你用 Python 写一个系统托盘定时提醒工具

💡 前言

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

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

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

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


🧰 技术选型

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

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

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


📦 功能设计

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

1. 托盘图标显示

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

2. 右键菜单设置提醒

支持以下菜单项:

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

3. 定时弹窗提醒

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

4. 后台静默运行

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


🛠️ 开发步骤

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

步骤一:准备开发环境

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

bash 复制代码
pip install pystray pillow

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

bash 复制代码
pip install pywin32

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


步骤二:生成托盘图标

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

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


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

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

菜单项包括:

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

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

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

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


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

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


python 复制代码
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()

🧩 总结

这个工具从构思到实现不到两个小时,却解决了我在工作中最头疼的问题之一 ------ 忘记休息。

它不仅是一个"摸鱼神器",还能帮助你提升工作效率、养成良好的作息习惯。

如果你也觉得上班有点无聊,不妨动手试试做一个属于自己的"健康助手"。说不定哪天,你的同事也会来问你要链接呢 😏

相关推荐
高频因子挖掘机13 分钟前
量化回测应该保存不复权数据吗?从数据口径到收益计算的工程实践
后端·github·api
高频因子挖掘机1 小时前
实时行情为什么不应该逐只股票请求?批量查询与标的池管理实践
后端·github·api
程序猿DD6 小时前
OctaFuse Gateway 2.15.0:MCP 聚合、向量 Embeddings 与官方目录同步
后端·agent
余槐i9 小时前
PostgreSQL 函数索引报错 must be immutable:3种绕法与代价
数据库·后端·sql·postgresql·性能优化
需要8269 小时前
Spring Bean 生命周期:从实例化到销毁的完整钩子
java·后端·spring
凤山老林10 小时前
Spring Boot 接入国密 SM2/SM3/SM4 的一些实践记录
spring boot·后端·python
伯恩bourne11 小时前
Spring Boot Bean 注册的两种方式:@Component 家族 vs @Configuration + @Bean
java·spring boot·后端
张彦峰ZYF12 小时前
停顿短不等于延迟低:G1、ZGC 与低延迟服务的目标分野、代价账本与选型标定
后端·回收暂停、应用停止总时长·到达安全点、分配停滞·屏障吃吞吐、并发线程吃核心·并发窗口吃堆余量·分区式靠挑回收集兑现目标·染色指针式不支持压缩引用
pride.li12 小时前
第03章 Python 教程-基础语法:注释与变量
服务器·前端·后端·python·算法·计算机视觉
upala13 小时前
【仓颉语言入门 · 第二篇 第 6 课】
后端