2010/11/28

python-notify(pynotify)をもっと簡単に使えるようにするモジュール

「Python Recipes」に戻る

Release:1.3
Date:November 28, 2010
テスト環境
OS: Ubuntu10.10
Python2.6.6

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/ などです。
ちなみにPythonスクリプトと同じディレクトリに入れていても使えます。
私は .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」に戻る

0 件のコメント:

コメントを投稿