Je voudrais savoir comment créer un message contextuel dans la barre d'état système avec python. J'ai vu ceux-ci dans de nombreux logiciels, mais il est difficile de trouver des ressources pour le faire facilement avec n'importe quelle langue. Quelqu'un connaît une bibliothèque pour faire cela en Python?
Avec l'aide de pywin32
bibliothèque vous pouvez utiliser l'exemple de code suivant que j'ai trouvé ici :
from win32api import *
from win32gui import *
import win32con
import sys, os
import struct
import time
class WindowsBalloonTip:
def __init__(self, title, msg):
message_map = {
win32con.WM_DESTROY: self.OnDestroy,
}
# Register the Window class.
wc = WNDCLASS()
hinst = wc.hInstance = GetModuleHandle(None)
wc.lpszClassName = "PythonTaskbar"
wc.lpfnWndProc = message_map # could also specify a wndproc.
classAtom = RegisterClass(wc)
# Create the Window.
style = win32con.WS_OVERLAPPED | win32con.WS_SYSMENU
self.hwnd = CreateWindow( classAtom, "Taskbar", style, \
0, 0, win32con.CW_USEDEFAULT, win32con.CW_USEDEFAULT, \
0, 0, hinst, None)
UpdateWindow(self.hwnd)
iconPathName = os.path.abspath(os.path.join( sys.path[0], "balloontip.ico" ))
icon_flags = win32con.LR_LOADFROMFILE | win32con.LR_DEFAULTSIZE
try:
hicon = LoadImage(hinst, iconPathName, \
win32con.IMAGE_ICON, 0, 0, icon_flags)
except:
hicon = LoadIcon(0, win32con.IDI_APPLICATION)
flags = NIF_ICON | NIF_MESSAGE | NIF_TIP
nid = (self.hwnd, 0, flags, win32con.WM_USER+20, hicon, "tooltip")
Shell_NotifyIcon(NIM_ADD, nid)
Shell_NotifyIcon(NIM_MODIFY, \
(self.hwnd, 0, NIF_INFO, win32con.WM_USER+20,\
hicon, "Balloon tooltip",msg,200,title))
# self.show_balloon(title, msg)
time.sleep(10)
DestroyWindow(self.hwnd)
def OnDestroy(self, hwnd, msg, wparam, lparam):
nid = (self.hwnd, 0)
Shell_NotifyIcon(NIM_DELETE, nid)
PostQuitMessage(0) # Terminate the app.
def balloon_tip(title, msg):
w=WindowsBalloonTip(title, msg)
if __name__ == '__main__':
balloon_tip("Title for popup", "This is the popup's message")
J'ai récemment utilisé le paquet Plyer pour créer des notifications multiplateformes sans douleur, en utilisant la façade Notification
(il a beaucoup d'autres choses intéressantes qui valent la peine d'être prises) un coup d'oeil).
Assez facile à utiliser:
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.png'
)
Voici le moyen simple d'afficher des notifications sur Windows 10 en utilisant python: module win10toast .
Exigences :
Installation :
>> pip install win10toast
Exemple :
from win10toast import ToastNotifier
toaster = ToastNotifier()
toaster.show_toast("Demo notification",
"Hello world",
duration=10)
Vous devrez utiliser une bibliothèque tierce python GUI ou la bibliothèque pywin32. TkInter, la boîte à outils GUI fournie avec python ne prend pas en charge la barre d'état système) UPS.
Bibliothèques neutres multiformes qui prennent en charge l'utilisation de la barre d'état système:
Bibliothèque spécifique à Windows qui prend en charge l'utilisation de la barre d'état système:
Informations/exemple de fenêtres contextuelles de la barre d'état système utilisant wxpython sur Windows:
dans le système Linux, vous pouvez utiliser la commande intégrée notify-send
.
ntfy
la bibliothèque peut être utilisée pour envoyer des notifications Push.
cliquez ici pour la documentation ntfy
installation:
Sudo pip install ntfy
exemples:
ntfy send "your message!"
ntfy send -t "your custom title" "your message"
Windows
Il existe maintenant un moyen officiel d'y parvenir en utilisant Python/Winrt , le github explique comment mapper l'API UWP à python ceux.
En suivant la documentation officielle UWP j'ai réussi à afficher une petite notification qui apparaît également dans le centre de notification Windows:
import winrt.windows.ui.notifications as notifications
import winrt.windows.data.xml.dom as dom
#create notifier
nManager = notifications.ToastNotificationManager
notifier = nManager.create_toast_notifier();
#define your notification as string
tString = """
<toast>
<visual>
<binding template='ToastGeneric'>
<text>Sample toast</text>
<text>Sample content</text>
</binding>
</visual>
</toast>
"""
#convert notification to an XmlDocument
xDoc = dom.XmlDocument()
xDoc.load_xml(tString)
#display notification
notifier.show(notifications.ToastNotification(xDoc))
La configuration se limite à l'installation de la bibliothèque
pip install winrt
Bonus macOS
J'ai également trouvé un moyen de le faire dans macOS en utilisant AppleScript, le but du code suivant est de construire un code AppleScript qui sera exécuté via python os.system
import os
def displayNotification(message,title=None,subtitle=None,soundname=None):
"""
Display an OSX notification with message title an subtitle
sounds are located in /System/Library/Sounds or ~/Library/Sounds
"""
titlePart = ''
if(not title is None):
titlePart = 'with title "{0}"'.format(title)
subtitlePart = ''
if(not subtitle is None):
subtitlePart = 'subtitle "{0}"'.format(subtitle)
soundnamePart = ''
if(not soundname is None):
soundnamePart = 'sound name "{0}"'.format(soundname)
appleScriptNotification = 'display notification "{0}" {1} {2} {3}'.format(message,titlePart,subtitlePart,soundnamePart)
os.system("osascript -e '{0}'".format(appleScriptNotification))
Utiliser tel quel :
displayNotification("message","title","subtitle","Pop")
Notes finales
J'ai résumé tout le code précédent en deux points