最小限のPythonアプリ

一通りサンプルに目を通して、なんとなくPyS60でのアプリケーションの骨組みのようなものが見えてきたような気がする。
filebrowser.pyを参考にして、アプリケーションタイトルを変更し、右ソフトキーで終了するだけのアプリを書いてみた。*1

#
# myapp.py
#
# SYMBIAN_UID = 0x01234567

# import sys
import appuifw
import e32

class MyApplication:
    def __init__(self):
        self.script_lock = e32.Ao_lock()

    def run(self):
        old_title = appuifw.app.title
        self.refresh()
        self.script_lock.wait()
        appuifw.app.title = old_title

    def refresh(self):
        appuifw.app.title = u"MyApplication"
        appuifw.app.menu = []
        appuifw.app.exit_key_handler = self.exit_key_handler

    def do_exit(self):
        self.exit_key_handler()

    def exit_key_handler(self):
        appuifw.app.exit_key_handler = None
        self.script_lock.signal()

if __name__ == '__main__':
    MyApplication().run()
    # sys.exit()
self.script_lock = e32.Ao_lock()

e32.Ao_lock()で帰ってくるオブジェクトをアプリ側で保持しておいて、

self.script_lock.wait()

waitメソッドを呼ぶと、ユーザーのイベント待ちに入るようだ。
イベントに対するアクションはwaitを呼ぶ前にコールバックとなる関数やメソッドを登録しておく。

appuifw.app.exit_key_handler = self.exit_key_handler

なるほどおおおお。

*1:スタンドアロンアプリにするときはimport sysとsys.exit()をコメントアウト

s60wikiをスタンドアロンアプリにしてみる

carbide2006-05-24

Python for S60で動作するスクリプトを検索しているうちにs60wikiというものを見つけた。
昔、Palmを使用していたときにはPalmWikiをインストールしていたのだが、アレをちょっと思いださせるwikiスクリプトだ。
702NKIIで常用したいと思ったのだが、毎回Pythonのメニューから起動するのはめんどくさい。
そこで前回紹介したpy2sisng.pyを使ってs60wikiをスタンドアロンアプリにしてみた。
手順:

  • s60wiki-20060304.py.txtをダウンロード。
  • エディタで開き、2行目に以下のような行を足す。*1
# SYMBIAN_UID = 0x01234567
  • 最後の行の後に以下の行を足す。
sys.exit()
  • 保存後、py2sisng.pyでsisファイル化。

以上。
最初、スクリプトの最後にsys.exit()のないスクリプトをアプリ化してみたら右ソフトキー等で終了出来なくて困ったことになった。Orz
sysモジュールをimportしていない他のスクリプトをアプリ化する場合には、スクリプトの先頭付近でimport sysとしておけば良いと思われる。

*1:ここではテスト用のUIDを使っている。配布するためには正式に取得したUIDが必要。

Pythonスクリプトをスタンドアロンアプリにしてみる

PyS60 Tutorial Menuこのページによると、PyS60向けPythonスクリプトをメニューから直接起動できるスタンドアロンアプリにできるらしい。
でも一つ問題が・・・。
スタンドアロンアプリへの変換にはpy2sisというコマンドラインツールを使うようなのだが、これはPCにしかインストールできないらしい。Orz (わたすはマカ)
しかし!
調べてみるとpy2sisと同じ働きをしてMacやLinuxで使えるツールがあった。
検索エンジンって素晴らしい。
解凍後READMEにかいてあるようにgenaifとmakesisをターミナルからぽちぽちとコンパイル
py2sisng.pyに実行属性を与えgenaifとmakesis共々パスの通ったフォルダにおけばインストール完了。
これでターミナルから

py2sisng.py --uid=0x01234567 myscript.py

なんて具合にuid*1Pythonスクリプトを指定してやるとsisファイルが生成する。
あとは通常のS60アプリと同じように702NKII702NKへインストールすればOK。

*1:作成したアプリを配布する場合はSymbianから正式なuidを取得する必要がある。

エディタを入れてみる

carbide2006-05-18

ケータイでPythonを動作させることは出来たけれど、これだけだとスクリプトを端末上で編集できない。
テキストエディタとしてYEditというS60アプリがあるけれどもシェアウェアだしなぁ、と思っていたらPythonで書かれたテキストエディタ702NKII上で動作するらしいとわかった。
ていうかhttp://www.postneo.com/postwiki/moin.cgi/PythonForSeries60に思いっきり書いてあった。
というわけでPythonで書かれたテキストエディタを導入してみた。
さてテキストエディタにも何種類か有るのだがフィーリングで2つ選んだ。

1つめはPyED(Py_s60 Exclusive Development (PyED) download | SourceForge.net)。

  1. ダウンロードするとpyed17.pyというファイルができる。
  2. Bluetoothファイル交換(私はマカ)へ直接ドロップ。
  3. メールで開くとダイアログがポップするのでPython scriptを選択。

簡単だぜぇ、とPythonを起動しスクリプトをメニューから選ぶと、エラーがでやがりました。Orz
モジュールが足りない・・・。
足りないモジュールはglob.pyとfnmatch.pyらしい。
Mac OS XPythonがインストールされていたはず、とハードディスクを漁ってみたところありましたよ。
/System/Library/Frameworks/Python.framework/Versions/2.3/lib/python2.3/
を、Finderで開いてglob.pyとfnmatch.pyをデスクトップにコピー。
そしてBluetooth送信してPython lib moduleとしてインストール。
今度は起動成功。

2つめはpyEdit(http://users.tkk.fi/~lhuovine/mobile/python.html)。
こちらはv0.8をダウンロード。
sisファイルなので通常のS60アプリと同じようにインストール出来た。
こっちは楽だなぁ。

PythonスクリプトのエディタとしてはPythonのメニューから起動できるPyEDのほうが若干使いやすいかな。
でもpyEditは一般的なテキストエディタとしても十分使えるのが良い。
両方、日本語はutf-8なら読み書き可能。ただしプログラム中で日本語を使うためには、ちょっと小細工が必要な模様。

702NKIIへPythonをインストール

carbide2006-05-17

私のケータイ電話Vodafone 702NKIIは携帯電話だというのに、Pythonというスクリプト言語がインストールできるのだという。
Pythonはほとんど知らないのだがせっかくなのでこの機会に勉強してみようと思いインストールしてみた。

  1. http://opensource.nokia.com/projects/pythonfors60/のページのLatest versionからリンクをたどる。
  2. 現時点での最新版は1.3.1らしい。702NKIIの場合、PythonForS60_2ndEdFP2_1_3_1.SISをダウンロード。
  3. 702NKIIへインストール。(ところで私はMacユーザーなのでhttp://mac702nk.sourceforge.jp/wiki/index.php?MacUnsisPy%2F%A5%C0%A5%A6%A5%F3%A5%ED%A1%BC%A5%C9からダウンロードできるMacUnsisPyを使った。)

にょろりんとした緑色のヘビがメニューにでたらインストール完了。
オプション > Run script > ball.py
を選ぶと緑のボールが跳ねるデモスクリプトが起動する。
ナビゲーションキーで加速をつけてみたり、ひとしきり遊んだら右ソフトキーで終了した。
他のはよくわからないのでとりあえず今日はココマデ。