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

使用tkinter与win10toast触发通知报ToastNotifier无classAtom属性错误如何解决

问题根因

这个AttributeError: 'ToastNotifier' object has no attribute 'classAtom'是win10toast原生库的已知缺陷:库底层调用Win32 API注册窗口类后,重复实例化ToastNotifier或者多线程并发调用时,资源销毁逻辑会提前释放classAtom属性,导致实例属性丢失报错。

修复方案

方案1:修改现有代码,复用全局实例

不需要更换依赖,只需要调整代码逻辑,避免重复创建ToastNotifier实例即可。

调整通知模块(notif2.py)代码:

from win10toast import ToastNotifier
import time

# 全局只初始化一次ToastNotifier实例,避免重复创建
toaster = ToastNotifier()

def main():
    toaster.show_toast("Hello World!!!",
    "Python is 10 seconds awsm!",
    icon_path=None,
    duration=1,
    threaded=True)
    # 等待当前通知展示完成,避免多线程资源冲突
    while toaster.notification_active():
        time.sleep(0.1)

if __name__ == "__main__":
    main()

调整tkinter主文件代码:

import tkinter as tk
from tkinter import *
import notif2

window = tk.Tk()

def noti():
    # 删掉冗余的if __name__ == "__main__"判断,避免模块导入时功能失效
    notif2.main()
    # 如果不需要点击一次后每秒循环弹出通知,删除下面这行即可
    # window.after(1000, noti)
        
Button(text='press',command=noti).pack()

window.mainloop()

方案2:直接替换修复版依赖

win10toast已经停止维护多年,相关bug没有官方修复,你可以直接安装社区维护的修复版:
pip install win10toast-persist
该库接口和原生win10toast完全一致,安装后不需要改动任何原有代码即可解决该报错。

内容的提问来源于stack exchange,提问作者Jellyfish

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 18:03:01