web-dev-qa-db-fra.com

Comment créer un message contextuel dans la barre d'état système avec python? (Les fenêtres)

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?

33
Roman Rdgz

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")
43
halex

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

Voici le moyen simple d'afficher des notifications sur Windows 10 en utilisant python: module win10toast .

Exigences :

  • pypiwin32
  • setuptools

Installation :

>> pip install win10toast

Exemple :

from win10toast import ToastNotifier
toaster = ToastNotifier()
toaster.show_toast("Demo notification",
                   "Hello world",
                   duration=10)

Resultant of the code

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:

  • wxPython
  • PyGTK
  • PyQT

Bibliothèque spécifique à Windows qui prend en charge l'utilisation de la barre d'état système:

  • pywin32

Informations/exemple de fenêtres contextuelles de la barre d'état système utilisant wxpython sur Windows:

6
cnodell

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"
4
jeevan

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

Windows

macOS

0
Marc_Alx