Я пытаюсь заставить winRT отправлять уведомления. Я попытался сделать это, чтобы сделать уведомление:

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

#create notifier
nManager = notifications.ToastNotificationManager
notifier = nManager.create_toast_notifier();

#define your notification as string
tString = """
<toast>
    <visual>
        <binding template='ToastGeneric'>
            <text>Sample toast</text>
            <text>Sample content</text>
        </binding>
    </visual>
</toast>
"""

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

#display notification
notifier.show(notifications.ToastNotification(xDoc))

Но он возвращает эту ошибку, когда я пытаюсь запустить его.

    notifier = notifications.ToastNotificationManager.create_toast_notifier()
RuntimeError: Element not found.

Моя система соответствует требованиям winrt

Windows 10, October 2018 Update or later.
Python for Windows, version 3.7 or later
pip, version 19 or later

Как исправить эту ошибку? Я не могу использовать другие модули, потому что winrt - единственный (о котором я знаю), где вы можете создавать элементы пользовательского интерфейса в уведомлении, такие как кнопки.

2
Alexander 6 Окт 2020 в 21:16

3 ответа

Лучший ответ

Исключение происходит из-за того, что вам нужно указать applicationID в create_toast_notifier()
Как, например, create_toast_notifier("MyApplicationId").

Это также описано здесь, но на C #.

1
FrozenAra 6 Окт 2020 в 18:29

Этот метод работает для меня на Python 3.9.1 и pip 21.0.1


Откройте PowerShell , введите следующую команду get-StartApps, она вернет Name и AppID

  • См. Таблицу или изображение на imgur для справки.

    Name            AppID                                          
    ----            -----
    Calculator      Microsoft.WindowsCalculator_8wekyb3d8bbwe!App
    
  • Это может быть удобно

    • get-StartApps | Where-Object {$_.Name -like '*Application Name*'}
    • get-StartApps | Where-Object {$_.Name -like '*Python*'}

Скопируйте / вставьте AppID в create_toast_notifier("Microsoft.WindowsCalculator_8wekyb3d8bbwe!App")

Примере:

#create notifier
nManager = notifications.ToastNotificationManager
notifier = nManager.create_toast_notifier("Microsoft.WindowsCalculator_8wekyb3d8bbwe!App");
0
tdj 9 Фев 2021 в 02:06

Я только что решил ту же проблему в отношении избавления от ошибки, но уведомление не отображается.

Этот Microsoft doc сообщает: «Важно! Вы должны включать AppUserModelID ярлыка вашего приложения на начальный экран каждый раз, когда вы вызываете CreateToastNotifier. Если вы этого не сделаете, тост не будет отображаться».

Затем я выполнил инструкции, которые нашел здесь, чтобы найти AppUserModelID, который оказался полным путем. в мой исполняемый файл Python.

Например:

notifier = nManager.create_toast_notifier("C:\\...\\Programs\\Python\\Python38\\python.exe")
2
Paul Baumgarten 23 Янв 2021 в 02:23