Reputation: 570
I need to make a program that alerts me with a windows notification, and I found out that this can be simply done with the following code.
I don't care what library I use
from win10toast import ToastNotifier
toast = ToastNotifier()
toast.show_toast("alert","text")
This code gives that following alert
However, I want there to be a button on the notification so I can click it and it will lead me to a url.
Like this example.
Is this possible?
I just found this website about toast contents can anyone help me use this with python?
Upvotes: 7
Views: 10095
Reputation: 71
Updating the accepted answer:
Libraries like plyer, winotify and Windows 10 Toast Notification are either not being updated or lack functionalities like callback on click. Also, they do not support having multiple buttons like dismiss/clear toast, reply, etc.
I found win11toast library which supports callback function and has many more advanced features than the earlier mentioned libraries.
Here's a simple example with on-click callback:
from win11toast import toast
toast('Hello Python', 'Click to open url', on_click=lambda args: your_function(args))
Another example which includes multiple buttons as well:
from win11toast import toast
toast('Hello', 'Click a button', buttons=['Approve', 'Dismiss', 'Other'])
This would show a toast like:
Upvotes: 0
Reputation: 59
Here is what I have found.
For installing the library:
pip install winotify
The code that you are looking for:
from winotify import Notification, audio
toast = Notification(app_id = "Notification",
title = "Alert",
msg = "Text",
duration = "long",
icon = r"FullPath.ico"
)
toast.set_audio(audio.Mail, loop=False)
toast.add_actions(label="URL Button", launch = "https://stackoverflow.com")
toast.show()
"FullPath.ico" is the full path of the file to put an icon to the notification.
To do this you can press "Ctrl + Shift + Right Click On Mouse" on the icon file and click on "Copy as path". Then paste it into the double quotation marks instead of "FullPath.ico".
Upvotes: 4
Reputation: 11
You should try Zroya.
Example:
import zroya
status = zroya.init(
app_name="NotifyBot",
company_name="MyBotCorp",
product_name="NoBo",
sub_product="core",
version="v01"
)
if not status:
print("Initialization failed")
# zroya is imported and initialized
template = zroya.Template(zroya.TemplateType.ImageAndText4)
#Adds text:
template.setFirstLine("Example notification")
#Adds the button
template.addAction("Ok")
zroya.show(template)
Ouput Example
You can read more here: https://malja.github.io/zroya/index.html
Sorry for not posting this sooner.
Upvotes: 1
Reputation: 6735
This type of behavior is not supported in the currently released version of Windows-10-Toast-Notifications. However, a contributor created a pull request that adds functionality for a callback_on_click
parameter that will call a function when the notification is clicked.
This has yet to be merged into the master branch, and given how long it's been since the library has been updated, I wouldn't count on it happening anytime soon. However, you can still install this modified version of the library to make use of this feature:
win10toast
from your environment (e.g., pip uninstall win10toast
).pip install git+https://github.com/Charnelx/Windows-10-Toast-Notifications.git#egg=win10toast
).Then, you can create a toast like this:
toast.show_toast(title="Notification", msg="Hello, there!", callback_on_click=your_callback_function)
A complete working example:
from win10toast import Toast
toast = ToastNotifier()
toast.show_toast(title="Notification", msg="Hello, there!", callback_on_click=lambda: print("Clicked!"))
When you click on the notification, you should see "Clicked!" appear in the Python console.
Important: This will only work if you're using the modified version of the library I mentioned above. Otherwise you will get the error: TypeError: show_toast() got an unexpected keyword argument 'callback_on_click'
.
Upvotes: 10