You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

编写Python定时弹窗通知脚本及多提醒仅首个生效问题求助

问题解决说明

故障根因

你的alert函数内部嵌入了while True死循环,程序执行到第一个alert调用时会永久卡在此函数的循环逻辑中,永远无法执行后续的alert调用,因此只有第一条提醒规则会生效。

修正方案

将所有提醒规则整理为统一列表,使用单个全局循环轮询所有规则即可,修正后代码如下:

import time
from win10toast import ToastNotifier

notify = ToastNotifier()
IconPath = "C:\\Users\\Hash\\Downloads\\Pill0.ico"

# 统一维护所有提醒规则:格式为(提醒小时, 提醒分钟, 提醒内容)
alert_rules = [
    (21, 30, ">>>> E P I C I P R I N  5ML <<<<"),
    (17, 48, ">>>> seccE P I C I P R I N  5ML <<<<"),
    (9, 15, ">>>> P A T A N O L <<<<"),
    (21, 15, ">>>> P A T A N O L <<<<"),
    (9, 32, ">>>> E P I C I P R I N  5ML <<<<"),
    (15, 32, ">>>> E P I C I P R I N  5ML <<<<"),
    (21, 32, ">>>> E P I C I P R I N  5ML <<<<"),
    (3, 32, ">>>> E P I C I P R I N  5ML <<<<"),
    (9, 50, ">>>> E P I F E N A C <<<<"),
    (17, 50, ">>>> E P I F E N A C <<<<"),
    (1, 50, ">>>> E P I F E N A C <<<<"),
    (22, 00, ">>>> E P I C I P R I N  5G <<<<")
]

def run_alert():
    last_trigger_minute = -1
    while True:
        current_ts = time.time()
        current_hour = int(current_ts // 3600 % 24)
        current_minute = int(current_ts // 60 % 60)
        # 同一分钟只触发一次,避免重复弹窗
        if current_minute == last_trigger_minute:
            time.sleep(30)
            continue
        # 遍历所有提醒规则
        for hour, minute, msg in alert_rules:
            if current_hour == hour and current_minute == minute:
                notify.show_toast("Drop Time!", msg, duration=120, icon_path=IconPath)
        last_trigger_minute = current_minute
        time.sleep(30)

if __name__ == "__main__":
    run_alert()

优化说明

  • 所有提醒规则统一管理,新增/修改规则只需修改alert_rules列表即可
  • 单循环轮询所有规则,解决了原代码死循环阻塞后续执行的问题
  • 增加了分钟去重逻辑和休眠逻辑,既避免了同一分钟重复触发同一条提醒,也降低了CPU空转占用

内容的提问来源于stack exchange,提问作者SAMPSON QUARMY SOKPOLI

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 00:18:00