Notifica interattiva windows 10 utilizzando python

Sep 13 2020

Volevo sapere se era possibile mostrare la notifica con Windows 10, che esegue un'azione specifica quando viene premuto. Lo so plyere win10toastma in entrambi i moduli non vedo un modo per configurarlo per funzionare con i clic. Lo volevo in modo che quando lo premo, verrà aperto un collegamento o verrà eseguita una funzione con cui lavorare tkinter. Le domande qui su SO al riguardo sono o senza risposta o incompatibili ora. Ragazzi, avete qualche idea?

Snippet 1:

from win10toast import ToastNotifier

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

Inoltre, nonostante lo dia duration=60in entrambi i modi, si chiude automaticamente dopo ca. 5 secondi.

Snippet 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')
)

Dopo alcune ricerche ho scoperto che win10toastfunziona win32guie alcune configurazioni potrebbero farlo funzionare. Ma non sono sicuro di cosa.

Grazie in anticipo

Risposte

1 Karthik Sep 13 2020 at 13:10

È possibile utilizzare il callback_on_clickmetodo per eseguire una richiamata facendo clic sulla notifica.

Come accennato in questo thread, l' installazione di callback_on_click è necessario installare pip install -e git+https://github.com/Charnelx/Windows-10-Toast-Notifications.git#egg=win10toastpoiché callback_on_clicknon è ancora stato unito a wintoast.

Riceverai un errore ma la tua nuova versione di toastNotifierverrà copiata con quella esistente.

Dovresti importare from src.win10toast.win10toast import ToastNotifierinvece di from win10toast import ToastNotifierinorder per accedere al callback_on_clickmetodo.

Si prega di controllare lo snippet.

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()

NOTA: assicurati di utilizzare in threaded=Truein show_toast()modo che il resto del programma possa essere eseguito mentre il brindisi è ancora attivo. Altrimenti la tua interfaccia grafica si bloccherebbe.