2

我正在尝试使用 python 在 win 10 上发出祝酒通知。但是,每次我尝试时,都会遇到一个错误,其中涉及称为“shell 通知图标”的内容。当我的意思是每次......我尝试了我能找到的每个图书馆!Notifypy、pynotifier、win10toast、plyer 等...每次,涉及 shell 通知图标的相同或大致相同的错误...

这是其中一个错误:

>>> Exception in thread Thread-1:
Traceback (most recent call last):
  File "C:\Users\Elève\AppData\Local\Programs\Python\Python37-32\lib\threading.py", line 926, in _bootstrap_inner
    self.run()
  File "C:\Users\Elève\AppData\Local\Programs\Python\Python37-32\lib\threading.py", line 870, in run
    self._target(*self._args, **self._kwargs)
  File "C:\Users\Elève\AppData\Local\Programs\Python\Python37-32\lib\site-packages\plyer\platforms\win\libs\balloontip.py", line 206, in balloon_tip
    WindowsBalloonTip(**kwargs)
  File "C:\Users\Elève\AppData\Local\Programs\Python\Python37-32\lib\site-packages\plyer\platforms\win\libs\balloontip.py", line 139, in __init__
    self.notify(title, message, app_name)
  File "C:\Users\Elève\AppData\Local\Programs\Python\Python37-32\lib\site-packages\plyer\platforms\win\libs\balloontip.py", line 188, in notify
    raise Exception('Shell_NotifyIconW failed.')
Exception: Shell_NotifyIconW failed.

现在看第一行,它说的是 Threads !那是因为我为我的应用程序使用了线程,你认为这就是它搞砸的原因吗?我怎么能看到和清理我所有的线程?

有些人已经在这里问过这个问题:

pywintypes.error: (-2147467259, 'Shell_NotifyIcon', '未指定的错误') win10toast python

但是没有人回答,这是另一个图书馆的创建者回答但没有帮助的问题:

为什么这个简单的 python toast 通知不起作用?

在最后一个链接上,解决方案说:

I discovered the solution to my question.
The toast notifications have been suppressed by Windows 10 Action Center.
At the bottom right corner, click the Action Center icon.
For my PC, the "Quiet Hours" setting was turned on. After I disable "Quiet Hours",
toast notifications can appear.

The python library win10toast works perfectly fine after Action Center settings are correctly set

但是在所有这些错误开始出现之前,我的代码已经工作了一点,我可以展示一些祝酒词,所以这不是重点......顺便说一下,这是我的代码:

from pynotifier import Notification
Notification(title='HEAD', description="BODY", duration=3, urgency=Notification.URGENCY_CRITICAL).send()

正如我所说,它工作得很好......直到我开始接触 icon_path 参数,因为我想添加一个图标。从那时起,错误......“shell通知图标”与我尝试更改的图标有关吗?我什至不知道它到底是什么!

所以,如果你能帮助我获得一个稳定且有效的代码,那就太棒了!提前谢谢。

编辑:好的,现在真正的wtf ...我重新启动了我的计算机,它运行良好,但当天晚些时候,停止工作......再次工作......等等!@.@

4

2 回答 2

2

你也可以像这样使用winrt

import winrt.windows.ui.notifications as notifications
import winrt.windows.data.xml.dom as dom
import sys

#create notifier
nManager = notifications.ToastNotificationManager
notifier = nManager.create_toast_notifier(sys.executable)

#define your notification as

tString = """
<toast>

    <visual>
        <binding template='ToastGeneric'>
            <text>New notifications</text>
            <text>Text</text>
            <text>Second text</text>
        </binding>
    </visual>

    <actions>
        <input id="textBox" type="text" placeHolderContent="Type a reply"/>
        <action
            content="Send"
            arguments="action=reply&amp;convId=01"
            activationType="background"
            hint-inputId="textBox"/>
            
        <action
            content="Button 1"
            arguments="action=viewdetails&amp;contentId=02"
            activationType="foreground"/>
    </actions>

</toast>
"""

#convert notification to an XmlDocument
xDoc = dom.XmlDocument()
xDoc.load_xml(tString)
notification = notifications.ToastNotification(xDoc)

# this is not called on the main thread.
def handle_activated(sender, _):
    print('Button was pressed!')

# add the activation token.
activated_token = notification.add_activated(handle_activated)

#display notification
notifier.show(notification)

while True:
    pass


另外,请注意,handle_activated 不会在主线程上调用,这在 IDLE 中不起作用。

于 2021-10-14T05:24:13.573 回答
1

好吧,似乎一切都自行解决了......我现在使用:

from plyer import notification 
notification.notify('Localisation :', 'France')

但我真的不知道我的错误来自哪里......好吧,所有这些通知库似乎都非常不稳定,告诉我“未指定的错误”等等...... Plyer 似乎更稳定。

于 2021-02-04T08:11:27.440 回答