待办提醒是很多个人工具、效率类应用的核心功能之一,用Python实现时不需要依赖复杂的第三方框架,通过轻量的定时任务库和桌面通知库就能快速搭建出高效可用的提醒功能,适配本地使用的各类场景。

核心实现思路
实现待办提醒功能的核心逻辑分为三个部分:首先是待办任务的数据存储,用来记录提醒时间、提醒内容等信息;其次是定时任务调度,按照设定的时间触发提醒逻辑;最后是提醒通知的发送,把待办信息推送给用户。如果只是本地使用,不需要持久化存储的话,甚至可以直接把待办信息放在内存中管理,进一步简化实现流程。
方案一:基于schedule的轻量定时提醒
schedule是Python中非常轻量的定时任务库,语法简单直观,适合处理简单的定时提醒需求,不需要额外的配置就能快速运行。
环境准备
先安装需要的依赖库:
# 安装schedule库,用于定时任务调度 pip install schedule # 如果需要在Windows系统发送桌面通知,安装win10toast # pip install win10toast # 如果是Linux或macOS系统,安装notify2 # pip install notify2
基础实现代码
下面的代码实现了简单的待办提醒功能,支持添加多个待办,到时间后会在控制台打印提醒信息,同时可以扩展为发送桌面通知:
import schedule
import time
from datetime import datetime
# 存储待办任务的列表,每个任务包含提醒时间和内容
todo_list = []
def add_todo(remind_time, content):
"""添加待办任务"""
todo_list.append({
"remind_time": remind_time,
"content": content,
"is_reminded": False
})
print(f"已添加待办:{content},提醒时间:{remind_time}")
def check_todo():
"""检查待办任务,到时间则触发提醒"""
current_time = datetime.now().strftime("%H:%M")
for todo in todo_list:
if todo["remind_time"] == current_time and not todo["is_reminded"]:
print(f"【待办提醒】{todo['content']}")
# 这里可以扩展为发送桌面通知,比如调用win10toast或notify2的方法
todo["is_reminded"] = True
# 添加待办任务,提醒时间格式为HH:MM
add_todo("14:30", "提交项目周报")
add_todo("16:00", "参加部门例会")
# 每分钟检查一次待办
schedule.every(1).minutes.do(check_todo)
if __name__ == "__main__":
print("待办提醒服务已启动,等待触发提醒...")
while True:
schedule.run_pending()
time.sleep(1)方案二:结合桌面通知的强提醒方案
如果需要在提醒时弹出桌面通知,让用户更直观地看到待办信息,可以结合系统对应的通知库实现,下面是适配Windows系统的实现示例:
import schedule
import time
from datetime import datetime
from win10toast import ToastNotifier
# 初始化通知对象
toaster = ToastNotifier()
todo_list = []
def add_todo(remind_time, content):
todo_list.append({
"remind_time": remind_time,
"content": content,
"is_reminded": False
})
def send_remind(content):
"""发送桌面通知"""
toaster.show_toast(
title="待办提醒",
msg=content,
duration=10, # 通知显示10秒
threaded=True
)
def check_todo():
current_time = datetime.now().strftime("%H:%M")
for todo in todo_list:
if todo["remind_time"] == current_time and not todo["is_reminded"]:
send_remind(todo["content"])
todo["is_reminded"] = True
# 添加待办
add_todo("15:20", "完成接口文档编写")
add_todo("17:30", "同步项目进度到管理系统")
schedule.every(1).minutes.do(check_todo)
if __name__ == "__main__":
while True:
schedule.run_pending()
time.sleep(1)功能优化建议
基础的提醒功能实现后,还可以根据实际需求做进一步优化:
- 增加待办持久化存储,把待办信息保存到JSON或SQLite文件中,避免程序重启后待办丢失
- 支持更复杂的提醒规则,比如按天、按周重复提醒,而不仅是单次固定时间提醒
- 添加提前提醒功能,比如在设定时间前5分钟、10分钟也发送提醒,避免用户错过
- 增加待办完成标记功能,已经完成的事项不再触发提醒,减少无效通知
常见问题说明
在使用schedule库时需要注意,它的时间精度是分钟级,如果需要更高精度的提醒,可以调整检查间隔,比如改为每秒检查一次,但会增加少量系统资源占用。另外如果程序需要长期后台运行,建议把它注册为系统服务,避免终端关闭后程序停止运行。
注意:如果使用notify2库在Linux系统发送通知,需要先确保系统安装了notification-daemon等通知服务,否则可能无法正常弹出通知。
整体来看,用Python实现待办提醒功能的门槛很低,开发者可以根据自己的使用场景选择合适的方案,快速搭建出符合需求的提醒工具。