46 votes

Notificateur de bureau multiplateforme en Python

Je suis à la recherche de Grognement -Bibliothèque de notifications en Python, semblable à une bulle de Windows. Imaginez écrire du code comme :

>>> import desktopnotifier as dn
>>> dn.notify('Title', 'Long description goes here')

.. et qui notifierait avec les tooltips correspondants sur Mac, Windows et Linux. Une telle bibliothèque existe-t-elle ? Si non, comment pourrais-je en écrire une moi-même ?

  • Est-ce que Mac est livré avec un notificateur par défaut ? Est-ce que Grognement quelque chose que je devrais installer séparément ?
  • Sous Windows, je suppose que cela peut nécessiter pywin32 ?
  • Sous Linux, en supposant GNOME, existe-t-il une API GNOME (utilisant gnome-python) qui permet de faire cela ?
  • Puis-je rendre les notifications "collantes" (c'est-à-dire qu'elles ne disparaissent jamais) sur toutes les plateformes ?

Mise à jour : Ma préférence va à no dépendre de gigantesques cadres d'interface graphique comme PyQT4 et wxPython pour une tâche simple comme celle-ci.

19voto

Stephen McDonald Points 1138

Voici un notificateur de bureau que j'ai écrit il y a quelques années en utilisant wxPython - il se comporte de manière identique sous Windows et Linux et devrait également fonctionner sous OSX. Il contient une boucle d'événements threadée qui peut être utilisée pour animer une fenêtre de notification contenant une icône et un message sur lequel on peut cliquer. Il a probablement besoin de quelques modifications pour être adapté à votre propre usage, mais le travail de base est fait.

17voto

Rabarberski Points 4902

À Pycon 2010, il y avait un présentation sur le développement Python multiplateforme . Il y avait aussi une page html à ce sujet, contenant quelques conseils pour la notification multiplateforme. Cependant, je ne la trouve plus en ligne, mais j'ai sauvegardé une copie locale, et voici la partie sur les notifications :

Il y a des occasions dans lesquelles votre application veut notifier à l'utilisateur de quelque chose : des mises à jour de logiciels sont disponibles, un nouveau message instantané a été reçu, l'impression de 300 pages est enfin terminée, etc.

  • Pour que les notifications soient faciles à porter sur plusieurs plates-formes, ne faites pas de interactives. Par exemple, Ubuntu ne supporte pas les notifications qui nécessitent une interaction avec l'utilisateur.

  • Ce sont les bibliothèques les plus importantes :

    o Linux : pynotify .

    o Mac OS X : Growl, qui n'est pas standard, est généralement installé.

    o Windows : une bonne solution wxPython est ToasterBox d'Andrea Gavana, qui imite l'aspect des notifications de Firefox ou Thunderbird.

  • Pour Phatch, nous avons développé une bibliothèque qui unifie ces trois éléments. systèmes en une seule API : phatch/lib/notify.py .

Le fichier python lié est très intéressant, et je pense que vous devriez être en mesure d'utiliser le fichier python lié presque tel quel. Le code est également très clair, ce qui vous permettra de voir rapidement ce qu'il fait.

L'approche de base consiste à détecter les systèmes de notification disponibles, presque indépendamment de la plate-forme, et à essayer de les utiliser dans un certain ordre, tout en revenant à des systèmes plus simples si nécessaire. Ainsi, si l'utilisateur a installé Growl, par exemple, il l'utilisera, quelle que soit la plate-forme.

Vous pourriez l'adapter pour qu'il prenne en charge d'autres systèmes de notification que les trois mentionnés ci-dessus.

7voto

masklinn Points 51
  • Comment s'y prendre pour l'écrire

    Vérifiez comment keyring gère les problèmes de multiplateforme (il s'agit d'une bibliothèque python qui se connecte à divers trousseaux de clés autodétectés pour le stockage).

  • Growl n'est pas fourni avec OSX, vous devez l'installer séparément, OSX n'est pas livré avec un système de notification intégré.

  • Pour les unix, vous pourriez vouloir utiliser DBus comme déjà mentionné (comme solution de repli, notez que dbus pourrait également être disponible sous OSX), mais KDE et Gnome ont tous deux des bibliothèques de type Growl. Respectivement, KNotification pour KDE et libnotify pour Gnome.

  • Pour Windows, consultez Snarl, et revenez aux bulles de notification si elles ne sont pas disponibles (en utilisant quelque chose du type ToasterBox )

Faites jamais même penser à rendre les notifications collantes. C'est stupide, c'est insensible et c'est vraiment ennuyeux. De plus, grâce à des gens comme vous, il a été fait no disponible dans la plupart des systèmes de notification.

Enfin, même s'il n'existe aucune librairie Python pour l'un de ces éléments, vous pouvez probablement utiliser ctypes pour y accéder.

3voto

linjunhalida Points 2200

Essayez PyQt4 si vous ne vous souciez pas de la taille.

voici la classe pour ce travail : http://doc.trolltech.com/4.5/qsystemtrayicon.html

0voto

Serra South Points 139

En cas de victoire, vous pouvez utiliser snarl .

Je l'utilise avec python : www.k23productions.com/e107_plugins/forum/forum_viewtopic.php?2972

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X