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

使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 12:54:23