Интерактивные уведомления windows 10 с использованием python
Я хотел знать, можно ли отображать уведомление с 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, и некоторая конфигурация с ним может заставить его работать. Но я не уверен что.
заранее спасибо
Ответы
Вы можете использовать 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()чтобы остальная часть вашей программы могла выполняться, пока тост еще активен. Иначе ваш графический интерфейс зависнет.