使用pystray开发托盘应用报错:AttributeError: 'Icon'对象无'_running'属性
pystray托盘应用报错原因及解决方法
错误原因
你遇到的TypeError: type object argument after * must be an iterable, not MenuItem错误,根源是菜单对象的定义方式错误。
当你写menu = (item('print(":D")', show))时,括号仅作为表达式包裹,并未创建元组,最终menu是单个MenuItem对象。而pystray的Icon构造函数要求菜单参数是可迭代对象(如元组、列表),它会通过Menu(*menu)解析菜单,单个MenuItem无法被*展开,因此触发类型错误。后续的AttributeError是因为Icon对象初始化失败,未生成_running属性导致的连锁问题。
解决方法
只需要调整菜单的定义方式,将单个MenuItem包装成可迭代对象即可:
方法1:使用带尾逗号的元组
from pystray import MenuItem as item import pystray from PIL import Image def show(): print(":D") image = Image.open("TrayIcon.jpg") # 添加尾逗号,确保被识别为元组 menu = (item('print(":D")', show),) icon = pystray.Icon("name", image, "title", menu) icon.run()
方法2:使用列表
from pystray import MenuItem as item import pystray from PIL import Image def show(): print(":D") image = Image.open("TrayIcon.jpg") # 用列表包装MenuItem menu = [item('print(":D")', show)] icon = pystray.Icon("name", image, "title", menu) icon.run()
内容的提问来源于stack exchange,提问作者Danhui Xu
相关产品推荐
相关产品推荐

