| 「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」に戻る | 
|---|

