「Python Recipes」に戻る |
---|
Release: | 1.3 |
---|---|
Date: | November 28, 2010 |
テスト環境
OS: Ubuntu10.10
epynotifyを大幅に書き直しました。¶
前のコードよりはよくなっていると思います。pynotify.Notification のクラスを継承したのでpynotifyのメソッドがすべて使えるようになりました。
時間があったらもっと機能を増やしたいと思います。
使い方¶
まだすべてを試したわけではありませんが、epynotifyは [/usr/share/icons] にあるアイコンはアイコン名を入力すれば使えるようです。(Ubuntuに登録されているアイコン?だけかもしれません)
ということで、自分の使いたいアイコンを検索できるように、find_icon() という関数を書きました。
find_icon(key[, size])¶- [/usr/share/icons] にあるアイコンをkeyとsizeで指定して、検索し、パスを表示します。
key は、何も入力しないと"dialog"で指定しています。
size は省略可能です。省略したら48x48のアイコンを検索します。
使い方は
$ python -c "import epynotify; epynotify.find_icon('emacs')"
/usr/share/icons/hicolor/48x48/apps/emacs.png
/usr/share/icons/hicolor/48x48/apps/emacs23.png
とすればアイコンのパスが表示されます。
$ python -c "import epynotify; epynotify.epynotify('title', image='emacs')"
で表示されるか確認してみてください。
epynotify(title[, message[, image]])¶- Notificationを表示します。
title は、何も入力しないと”Hello, World!”になっていて省略可能ですが、何か記入してください。
message は省略可能です。省略すると何も表示されません。
image は省略可能です、省略するとアイコンは表示されません。
imageは番号で指定できます。 ex) image=0
私が指定しているアイコンは
{0: "dialog-information", 1: "distributor-logo", 2: "un-reboot", 3: "dialog-error", 4: "gnome-run"}
ですが、ここは好きなように書き換えてください。
[/usr/share/icons]にあるアイコンはアイコン名だけで表示が可能です。
ex) image="emacs"
epynotifyと同じディレクトリにあるアイコンは拡張子をつけてください。
ex) image="attention.png"
これら以外のアイコンを使う場合は絶対パスを指定してください。
ex) image="/home/user/Pictures/icons/function.png"
残りの関数は前と同じで、新しいepynotifyの関数を参考にしてください。
以下は古い内容です。
汚いコードなので誰か修正してもらえると嬉しいです。¶
pynotifyをもっと簡単に使いたいなぁと思ってつくりました。
コードはめちゃくちゃ汚いので、誰か間違いを指摘していただけるととても嬉しいです。
ライセンスはpython-notifyに準じると思うのですが、そうでない場合は 改変なりなんなり好き勝手に
使ってください。ここの記事へのリンクをしていただけると私がかってに喜びます。
使い方¶
まずは、ダウンロードしましょう。ここ からダウンロードしてください。
テストができるようにしてあるので、まずは実行してみてください。
tar.gz を展開してできたディレクトリにはいって、下記を実行します。
$ python epynotify.py
このような感じで表示されます。
使いたいときは、Pythonのパスの通ったディレクトリに入れてください。
例えば、 /usr/lib/python2.6/ などです。
私は .zshrc に
#Add my modules
export PYTHONPATH=$PYTHONPATH:/home/iyori/Works/python/mymodules
それぞれの機能
epynotify(title[, message[, image]])¶- Notificationを表示します。
Note
title は、何も入力しないと”Hello, World!”になっていて省略可能ですが、何か記入してください。
message は省略可能です。省略したら何も表示されません。
image は省略可能で、デフォルトでは epynotify ディレクトリの”attention.png”が表示されます。
他のアイコンを使いたいときは絶対パスを記入してください。
gnotify(title[, message[, image]])¶- Notificationを表示します。
Note
title は、何も入力しないと”Hello, World!”になっていて省略可能ですが、何か記入してください。
message は省略可能です。省略したら何も表示されません。
image は省略可能で、デフォルトでは /usr/share/icons/gnome/48x48/actions/ の
“gnome-run.png”が表示されます。 /usr/share/icons/gnome/48x48/actions/ が
ない場合は、何も表示されません。いろいろ自分好みに書き換えてみてください。
messages(title[, message[, image]])¶- Notificationとコンソールにメッセージと現在時刻を表示します。
Note
title は、 Notificationとコンソールに表示したいタイトルを記入してください。
message は省略可能です。省略したら何も表示されません。
image は省略可能で、デフォルトでは epynotify ディレクトリの”attention.png”が表示されます。
他のアイコンを使いたいときは絶対パスを記入してください。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 | #-*- coding:utf-8 -*-
# Author: Iyori Komiyama
# Contact: hazimarino@gmail.co.jp
"""\
pynotifyを簡単に使えるようにするモジュール
Classes:
_EPYNotify
_GPYNotify
Functions:
epynotify(title='Hello, World', message='test', image='attention.png')
-> None
gnotify(title='Hello, World', message='test,
image='/usr/share/icons/gnome/48x48/actions/gnome-run.png') -> None
messages(title, message='test', image='attention.png') -> None
"""
import os.path
import datetime
try:
import pynotify
if not pynotify.init('test'):
raise
except ImportError as e:
print("{0} : Please install pynotify".format(e))
except:
ERROR = "there was a problem initializing the pynotify module"
print(ERROR)
__all__ = ['epynotify', 'gnotify', 'messages']
__version__ = '0.0.1'
DEFAULT_TITLE = 'Hello, World!'
DEFAULT_MESSAGE = ''
DEFAULT_IMAGE = None
class _EPYNotify(object):
""" EPYNotify(title, message='', image='attention.png') return None
title -> pynotifyに表示するタイトル
message -> メッセージを表示(省略可)
image -> デフォルトでは、緑のアテンションアイコンが表示されます。
"""
def __init__(self, title, message='', image=None):
self.title = title
self.message = message
self.image = image
def show(self):
""" show Notification """
if not self.image:
mddir = os.path.dirname(os.path.abspath(__file__))
self.image = '{0}/attention.png'.format(mddir)
pynotify.init(self.title)
n = pynotify.Notification(self.title, self.message, self.image)
n.show()
class _GPYNotify(_EPYNotify):
def show(self):
""" show ubuntu icons that (/usr/share/icons/hicolor/48x48/apps/)
Default icon is gnome-run.png.
You choices (/usr/share/icons/gnome/48x48/actions) image.
"""
if not self.image:
self.image = "gnome-run.png"
self.image = "/usr/share/icons/gnome/48x48/actions/{0}".format(self.image)
pynotify.init(self.title)
n = pynotify.Notification(self.title, self.message, self.image)
n.show()
def epynotify(title='', message='', image=None):
"""epynotify([string[, string[, absolute-icon-path]]])
return to EPYNotify().show()
title='' default string is 'Hello, World!'
message='' notify's message
image=None default icon is attention.png.
"""
if not title:
title = DEFAULT_TITLE
message = DEFAULT_MESSAGE
image = DEFAULT_IMAGE
return _EPYNotify(title, message, image).show()
else:
return _EPYNotify(title, message, image).show()
def gnotify(title='', message='', image=None):
"""\
gnomeのアイコンをいろいろ使えるepynotify
"""
if not title:
title = DEFAULT_TITLE
message = DEFAULT_MESSAGE
image = DEFAULT_IMAGE
return _GPYNotify(title, message, image).show()
else:
return _GPYNotify(title, message, image).show()
def messages(title, message='', image=None):
"""\
Notification と一緒に、consoleにメッセージと時間を表示する。
"""
dt = datetime.datetime.now()
if not message:
message = DEFAULT_MESSAGE
image = DEFAULT_IMAGE
epynotify(title)
print('*' * 80)
print('\t{0}\n'.format(title))
else:
epynotify(title, message, image)
print('*' * 80)
print('\t{0}\n\t{1}\n'.format(title, message))
print('{year}/{month:#02d}/{day:#02d} '
'[{hour:#02d}:{minute:#02d}:{second:#02d}]'.format(
year=dt.year, month=dt.month, day=dt.day, hour=dt.hour,
minute=dt.minute, second=dt.second))
print('*' * 80)
def demo():
from time import sleep
# test
epynotify('Hello, World!', 'test')
sleep(10)
gnotify('Hello, World!', 'test')
sleep(10)
messages('test', 'test')
if __name__ == '__main__':
demo()
|
最後に¶
以上で、説明的な内容は終わりですが、classを使う必要ないんじゃない??
とか、つっこみどころ満載なので、twitterやコメントにてご指摘を受け付けています。
参考・引用¶
Note
■ Pythonスクリプトでオリジナルのメッセージを通知する方法 - 独学Linux
「Python Recipes」に戻る |
---|