Pythonで Growl -like、Windows balloon-tip-like notifications libraryを探しています。次のようなコードを想像してみてください。
>>> import desktopnotifier as dn
>>> dn.notify('Title', 'Long description goes here')
..そして、Mac、Windows、Linuxの対応するツールチップで通知されます。そのようなライブラリは存在しますか?そうでない場合、自分でどのように書きますか?
更新:私の好みはしないシンプルなタスクのためにPyQT4やwxPythonのような巨大なGUIフレームワークに依存していますこのような。
これは、数年前にwxPythonを使用して書いたデスクトップ通知です -これは、WindowsとLinuxで同じように動作し、OSXでも動作するはずです。これには、クリック可能なアイコンとメッセージを含む通知ウィンドウをアニメーション化するために使用できるスレッド化されたイベントループが含まれています。独自の目的に合わせてカスタマイズするには、おそらくいくつかの調整が必要ですが、基本的な作業は完了しています。
Pycon 2010には クロスプラットフォームに関するプレゼンテーションPython development がありました。クロスプラットフォーム通知に関するいくつかのアドバイスを含む、それに関するHTMLページもありました。しかし、 、オンラインではもう見つかりませんが、ローカルコピーを保存しました。これは通知の一部です。
アプリケーションがユーザーに何かについて通知したい場合があります。ソフトウェアの更新が利用可能である、新しいインスタントメッセージが受信された、300ページの印刷ジョブが最終的に終了した、などです。
- 通知をクロスプラットフォームに簡単に移植できるようにするには、通知をインタラクティブにしないでください。たとえば、Ubuntuはユーザーの操作を必要とする通知をサポートしていません。
これらは最も重要なライブラリです:
o Linux: pynotify 。
o Mac OS X:標準ではないGrowlが通常インストールされます。
o Windows:優れたwxPythonソリューションは、Andrea Gavanaの ToasterBox で、FirefoxまたはThunderbirdの通知の外観を模倣しています。
Phatchについては、これら3つのシステムを1つのAPIに統合するライブラリ phatch/lib/notify.py を開発しました。
リンクされたpythonファイルは非常に興味深いものであり、リンクされたpythonファイルをほとんどそのまま使用できるはずです。コードも非常に明確です。それで、あなたはそれが何をするかをすぐに見るでしょう。
基本的なアプローチは、プラットフォームにほとんど関係なく、使用可能な通知システムを検出し、それらを特定の順序で使用しようとしますが、必要に応じてより単純なシステムにフォールバックします。このようにして、ユーザーがGrowlをインストールすると、プラットフォームに関係なく使用されます。
上記の3つ以外の通知システムのサポートを提供するためにそれを適合させることができます。
それを書き始める方法
keyring
がクロスプラットフォームの問題をどのように処理するかを確認します(これはpythonライブラリであり、自動検出されたさまざまなキーチェーンバックエンドにプラグインして保存します)
GrowlはOSXにバンドルされていないため、個別にインストールする必要があります。OSXには通知システムが組み込まれていません。
UNIXの場合、すでに述べたようにDBusにフックすることもできますが(フォールバックとして、dbusはOSXでも使用できることに注意してください)、KDEとGnomeの両方にGrowlに似たライブラリがあります。それぞれ、KDEのKNotificationとGnomeのlibnotify。
Windowsの場合、Snarlを確認し、利用できない場合は通知バブルにフォールバックします( ToasterBox の行に沿って何かを使用します)。
通知を固定することを考えてもしないでください。それはばかげている、それは鈍感であり、それはひどく迷惑です。また、あなたのような人のために、ほとんどの通知システムで利用できないようになっています。
最後に、これらのいずれにもPython libがない場合でも、ctypes
を使用してそれらにアクセスできます。
サイズを気にしない場合は、 PyQt4 を試してください。
これがこのジョブのクラスです: http://doc.trolltech.com/4.5/qsystemtrayicon.html
必要なように聞こえます Growl for Windows
ここに私のために働く簡単なものがあります。トーストは2秒間維持され、消えます。はい、OPは「巨大な」PyQt4を望んでいませんでしたが、これは他の人に役立つかもしれません。
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
Pyuic4によって作成されたトリミングされたファイル「uiToast.py」は次のとおりです。
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)
勝利時には snarl を使用できます。
Pythonでの使用: www.k23productions.com/e107_plugins/forum/forum_viewtopic.php?2972
優れたクロスプラットフォームサポートのために、私は PyQt を調べます。それはあなたのライブラリにいくつかの重荷を追加しますが、それらはほとんどのねじれをうまく処理しました。