Windows 10 de notificação interativa usando python

Sep 13 2020

Queria saber se era possível mostrar notificação com o windows 10, que faz uma ação específica quando pressionado. Eu conheço plyere, win10toastmas em ambos os módulos, não vejo uma maneira de configurá-lo para funcionar com cliques. Queria para que ao premir abrisse um link ou rodasse alguma função, para trabalhar tkinter. As perguntas aqui no SO sobre isso estão sem resposta ou incompatíveis agora. Vocês têm alguma ideia?

Snippet 1:

from win10toast import ToastNotifier

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

Além disso, apesar de dar duration=60, fecha automaticamente após aprox. 5 segundos.

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

Depois de alguma pesquisa, encontrei win10toasttrabalhos com win32gui, e alguma configuração com ele poderia fazer funcionar. Mas não tenho certeza do quê.

desde já, obrigado

Respostas

1 Karthik Sep 13 2020 at 13:10

Você pode usar o callback_on_clickmétodo para realizar um retorno de chamada clicando na notificação.

Conforme mencionado nesta thread de instalação callback_on_click, você precisará instalar, pip install -e git+https://github.com/Charnelx/Windows-10-Toast-Notifications.git#egg=win10toastpois callback_on_clickainda não foi mesclado com wintoast.

Você obterá um erro, mas sua nova versão do toastNotifierserá copiada com a existente.

Você teria que importar em from src.win10toast.win10toast import ToastNotifiervez de from win10toast import ToastNotifierinorder para acessar o callback_on_clickmétodo.

Verifique o 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 - Certifique-se de usar threaded=Truein show_toast()para que o resto do programa possa ser executado enquanto o toast ainda estiver ativo. Caso contrário, seu gui congelaria.