Windows任务计划程序与pystray托盘图标显示冲突问题
Windows 11下Python托盘脚本通过任务计划启动不显示图标问题解决
问题描述
我编写了一个Python脚本,运行时会在Windows 11右下角生成托盘图标,代码片段如下:
some code ... image = PIL.Image.open(r"D:\payDisplay\images\pound_icon.png") icon = pystray.Icon("Pay", image, menu=pystray.Menu( pystray.MenuItem("Update", on_clicked) )) on_clicked(icon) log.write(f'Finished timetables sorting.\n') log.close() icon.run()
希望该脚本在Windows登录时后台启动,但遇到以下问题:
- 通过CMD运行脚本时,托盘正常显示且功能正常;
- 通过任务计划程序运行时,进程在后台运行但托盘不显示,
icon.run()之前的代码均已执行,且无任何报错(已用try-except捕获异常并记录日志)。
任务计划程序配置信息:
- 程序/脚本:
C:\Users\yagni\AppData\Local\Programs\Python\Python311\pythonw.exe - 添加参数:
taskbarPay.pyw - 起始于:
D:\payDisplay
解决办法
1. 调整任务计划安全选项
- 打开任务计划程序,找到目标任务右键选择「属性」;
- 切换到「常规」标签页,勾选「不管用户是否登录都要运行」,同时取消勾选「不存储密码」;
- 切换到「设置」标签页,取消所有任务运行时长限制类的勾选选项。
2. 绑定用户会话桌面权限
- 进入任务计划的「操作」标签页,编辑现有操作;
- 切换到「条件」标签页,取消勾选「只有在计算机使用交流电源时才启动此任务」(笔记本用户需注意);
- 切换到「设置」标签页,勾选「如果任务已经在运行,则不要启动新实例」,避免多进程冲突。
3. 修正Python运行上下文
- 临时将程序/脚本替换为
python.exe测试,确认托盘能正常显示后再改回pythonw.exe; - 确保脚本中所有文件路径(如图标路径)均使用绝对路径,避免任务计划起始目录导致的路径解析问题。
4. 强制pystray图标显示
- 修改pystray初始化代码,添加显式可见性参数:
icon = pystray.Icon("Pay", image, menu=pystray.Menu( pystray.MenuItem("Update", on_clicked) ), visible=True) - 或者在
icon.run()前强制设置可见性:icon.visible = True icon.run()
5. 检查系统通知区域设置
- 右键任务栏选择「任务栏设置」,找到「通知区域」的「选择哪些图标显示在任务栏上」;
- 确保名为「Pay」的托盘图标被设置为「显示图标和通知」。
内容的提问来源于stack exchange,提问作者yahnyshc
相关产品推荐
相关产品推荐

