编写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
相关产品推荐
相关产品推荐

