待办提醒功能的核心需求是让程序在指定的分钟级时间点触发提醒,Python生态中有成熟的模块可以支撑这个需求,不需要从零实现复杂的时间逻辑。我们可以通过datetime模块处理时间解析和比对,用schedule模块实现定时任务调度,再结合系统通知接口完成提醒动作。

实现前的环境准备
首先需要安装必要的第三方模块,schedule模块用于简化定时任务调度,win10toast模块可以在Windows系统下发送桌面通知,如果是macOS或Linux系统可以替换为对应的系统通知库。执行以下命令安装依赖:
# 安装依赖模块 pip install schedule pip install win10toast
核心实现步骤
1. 时间解析与校验
用户设置的提醒时间通常是字符串格式,比如"14:30",我们需要先将其转换为可比对的时间对象,同时校验时间格式是否合法:
from datetime import datetime
def parse_remind_time(time_str):
# 校验时间格式是否为HH:MM
try:
remind_time = datetime.strptime(time_str, "%H:%M")
return remind_time
except ValueError:
return None2. 定时任务调度逻辑
使用schedule模块每分钟检查一次当前时间,和预设的提醒时间做比对,匹配则触发提醒:
import schedule
import time
from datetime import datetime
from win10toast import ToastNotifier
# 初始化通知器
notifier = ToastNotifier()
# 存储待办事项,格式为{提醒时间字符串: 待办内容}
todo_dict = {}
def check_remind():
# 获取当前时间的时分部分
current_time = datetime.now().strftime("%H:%M")
# 如果当前时间在待办字典中,触发提醒
if current_time in todo_dict:
todo_content = todo_dict[current_time]
notifier.show_toast(
"待办提醒",
f"您有新的待办事项:{todo_content}",
duration=10
)
# 提醒后删除该待办,避免重复提醒
del todo_dict[current_time]
# 每分钟执行一次检查
schedule.every(1).minutes.do(check_remind)3. 主程序运行逻辑
编写主程序接收用户输入的待办内容和提醒时间,启动调度循环:
def main():
print("Python待办提醒工具,输入q退出程序")
while True:
# 接收用户输入
todo_content = input("请输入待办内容:")
if todo_content == "q":
break
remind_time_str = input("请输入提醒时间(格式HH:MM,如14:30):")
# 校验时间格式
if parse_remind_time(remind_time_str) is None:
print("时间格式错误,请重新输入")
continue
# 存入待办字典
todo_dict[remind_time_str] = todo_content
print(f"已添加待办:{remind_time_str} {todo_content}")
# 启动调度循环
print("程序已启动,正在监听待办提醒...")
while True:
schedule.run_pending()
time.sleep(1)
if __name__ == "__main__":
main()注意事项
- 程序运行期间不能关闭终端,否则调度任务会停止,如果需要后台运行可以结合系统服务或任务计划程序实现
- 如果需要在多个时间点提醒,可以多次调用添加待办的流程,待办字典会自动存储多个时间点的任务
- 时间比对使用的是本地系统时间,如果系统时间不准确会导致提醒偏差,建议确保系统时间同步
- 非Windows系统可以替换win10toast为对应的通知库,比如macOS可以使用osascript调用系统通知接口
功能扩展方向
如果需要更强大的功能,还可以扩展以下能力:
- 增加待办持久化,把待办数据保存到本地文件,程序重启后也能读取历史待办
- 支持按日期设置提醒,比如"2024-05-20 14:30",扩展时间解析逻辑即可
- 增加提醒方式,除了桌面通知还可以发送邮件、企业微信消息等
Python待办提醒时间调度schedule模块datetime模块修改时间:2026-06-02 22:48:46