Je cherche Growl - like, bibliothèque de notifications Windows en forme de bulle, en python. Imaginez écrire du code comme:
>>> import desktopnotifier as dn
>>> dn.notify('Title', 'Long description goes here')
.. et que vous notifieriez avec les info-bulles correspondantes sur Mac, Windows et Linux. Une telle bibliothèque existe-t-elle? Sinon, comment pourrais-je en écrire un moi-même?
Update: Ma préférence va de not dépend de gigantesques frameworks d'interface graphique tels que PyQT4 et wxPython pour une tâche aussi simple que celle-ci.
Voici un avis de bureau que j'ai écrit il y a quelques années à l'aide de 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 l'utilisateur peut cliquer. Il a probablement besoin de quelques ajustements pour l'adapter à vos propres besoins, mais le travail de base est terminé.
À Pycon 2010, il y avait une présentation sur le développement Python multiplate-forme . Il y avait aussi une page html à ce sujet, contenant quelques conseils pour la notification multiplate-forme. Cependant, je ne le trouve plus en ligne, mais j’ai sauvegardé une copie locale. C’est la partie sur les notifications:
Il existe des cas dans lesquels votre application souhaite notifier l'utilisateur à propos de quelque chose: des mises à jour logicielles sont disponibles, un nouveau message instantané ont été reçus, le travail d'impression de 300 pages est enfin terminé, etc.
- Pour que les notifications restent faciles à porter sur plusieurs plates-formes, ne créez pas les interactifs. Par exemple, Ubuntu ne prend pas en charge les notifications qui nécessitent une interaction de 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ée.
o Windows: une bonne solution wxPython est ToasterBox de Andrea Gavana, qui imite l'apparence des notifications Firefox ou Thunderbird.
Pour Phatch, nous avons développé une bibliothèque qui unit ces trois systèmes dans une API: phatch/lib/notify.py .
Le fichier python lié est très intéressant et je pense que vous devriez pouvoir utiliser le fichier python lié presque tel quel. Le code est également très clair, vous verrez donc rapidement ce qu’il fait.
L'approche de base est de détecter les systèmes de notification disponibles, presque indépendamment de la plate-forme, et d'essayer de les utiliser dans un certain ordre, mais de recourir à des systèmes plus simples, si nécessaire. De cette façon, si l’utilisateur a, par exemple, Growl installé il va l'utiliser, quelle que soit la plate-forme.
Vous pouvez l'adapter pour prendre en charge d'autres systèmes de notification que les trois mentionnés ci-dessus.
essayez PyQt4 , si vous ne vous souciez pas de la taille.
voici la classe correspondant à ce travail: http://doc.trolltech.com/4.5/qsystemtrayicon.html
On dirait que vous avez besoin Growl pour Windows
Voici quelque chose de simple qui fonctionne pour moi. Le Toast reste en place pendant 2 secondes et disparaît. Oui, OP ne voulait pas de «gigantesques» PyQt4, mais cela pourrait être utile aux autres.
import sys, time
from PyQt4 import QtCore, QtGui
import uiToast
window = None # global
# Usage: Toast('Message')
class Toast(QtGui.QMainWindow):
def __init__(self, msg):
global window # some space outside the local stack
window = self # save pointer till killed to avoid GC
QtGui.QWidget.__init__(self)
self.setWindowFlags(QtCore.Qt.FramelessWindowHint)
self.ui = uiToast.Ui_MainWindow()
self.ui.setupUi(self)
self.ui.display.setText(msg)
self.toastThread = ToastThread() # start thread to remove display
self.connect(self.toastThread, QtCore.SIGNAL("finished()"), self.toastDone)
self.toastThread.start()
self.show()
def toastDone(self):
global window
window = None # kill pointer to window object to close it and GC
class ToastThread(QtCore.QThread):
def __init__(self):
QtCore.QThread.__init__(self)
def run(self):
time.sleep(2.0) # wait and die
Le fichier compressé 'uiToast.py' créé par pyuic4 est:
from PyQt4 import QtCore, QtGui
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.resize(547, 96)
palette = QtGui.QPalette()
brush = QtGui.QBrush(QtGui.QColor(255, 255, 255))
brush.setStyle(QtCore.Qt.SolidPattern)
palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Base, brush)
brush = QtGui.QBrush(QtGui.QColor(255, 170, 0))
brush.setStyle(QtCore.Qt.SolidPattern)
palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Window, brush)
MainWindow.setPalette(palette)
self.centralwidget = QtGui.QWidget(MainWindow)
self.display = QtGui.QTextBrowser(self.centralwidget)
self.display.setGeometry(QtCore.QRect(0, 0, 551, 101))
palette = QtGui.QPalette()
brush = QtGui.QBrush(QtGui.QColor(255, 170, 0))
brush.setStyle(QtCore.Qt.SolidPattern)
palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Base, brush)
self.display.setPalette(palette)
font = QtGui.QFont()
font.setPointSize(12)
self.display.setFont(font)
MainWindow.setCentralWidget(self.centralwidget)
Sur Win, vous pouvez utiliser snarl .
Utilisation avec python: www.k23productions.com/e107_plugins/forum/forum_viewtopic.php?2972
Pour un bon support multi-plateforme, je regarderais PyQt . Cela ajoutera du poids à votre bibliothèque, mais ils ont fait du bon travail pour résoudre la plupart des problèmes.