Интерактивные уведомления windows 10 с использованием python

Sep 13 2020

Я хотел знать, можно ли отображать уведомление с Windows 10, которое при нажатии выполняет определенное действие. Я знаю , о plyerи , win10toastно в обоих этих модулей я не вижу способ настроить его для работы с кликами. Я хотел, чтобы при нажатии открывалась ссылка или запускалась какая-то функция для работы tkinter. Вопросы здесь, на SO по этому поводу, сейчас либо остаются без ответа, либо несовместимы. У вас есть какие-нибудь идеи?

Фрагмент 1:

from win10toast import ToastNotifier

noti = ToastNotifier()
noti.show_toast('Random','Hello World',icon_path='ico.ico',duration=60)

Кроме того, несмотря на то, что duration=60он открывается в любую сторону, он автоматически закрывается через прибл. 5 секунд.

Фрагмент 2:

from plyer.utils import platform
from plyer import notification

notification.notify(
    title='Here is the title',
    message='Here is the message',
    app_name='Here is the application name',
    app_icon='path/to/the/icon.' + ('ico' if platform == 'win' else 'png')
)

После некоторого исследования я обнаружил, что он win10toastработает win32gui, и некоторая конфигурация с ним может заставить его работать. Но я не уверен что.

заранее спасибо

Ответы

1 Karthik Sep 13 2020 at 13:10

Вы можете использовать callback_on_clickметод для выполнения обратного вызова при нажатии на уведомление.

Как упоминалось в этом потоке установки callback_on_click, вам нужно будет установить, pip install -e git+https://github.com/Charnelx/Windows-10-Toast-Notifications.git#egg=win10toastпоскольку callback_on_clickон еще не объединен с wintoast.

Вы получите сообщение об ошибке, но ваша новая версия toastNotifierбудет скопирована с существующей.

Для доступа к методу вам придется импортировать from src.win10toast.win10toast import ToastNotifierвместо порядка .from win10toast import ToastNotifiercallback_on_click

Пожалуйста, проверьте фрагмент.

from src.win10toast.win10toast import ToastNotifier
import tkinter as tk
from tkinter import *
import webbrowser

top = tk.Tk()
top.geometry('50x50')
top.title('shop')

url = 'http://www.google.com'

def notify():
   noti.show_toast('Random','Hello World',duration=60, threaded=True,callback_on_click=action) 

def action():
    webbrowser.open_new(url)
    print("Done")
    
noti = ToastNotifier() 
btn = Button(top, text= "Enter", command=notify)
btn.pack()

top.mainloop()

ПРИМЕЧАНИЕ. Убедитесь, что вы используете threaded=Truein, show_toast()чтобы остальная часть вашей программы могла выполняться, пока тост еще активен. Иначе ваш графический интерфейс зависнет.