« HP200LXと車の親しい関係 | トップページ | 5800XM のファイルブラウザ »

2009年4月27日 (月)

5800XM でappuifw2を使う (python) その3(その2で終わらなかった)

2009-04-27(月)曇り、のち雨

  (使用法に追記しました。最後の注1の部分です。 2009-04-28)

 Nokia 5800XM のPythonでappuifw2(のスクロールバー)を使う話の続きです。前回、「5800XM でappuifw2を使う (python) その2(一応まとめ?)」とか書いたのですが、終わりませんでした。

 今までの話は下記です。(使い方とか問題点とか)

   「Nokia 5800 XM、 テキストエディタ py60tex に手を加えて、、
   「5800XM でappuifw2を使う (python)
   「5800XM でappuifw2を使う (python) その2(一応まとめ?)

 さて、上記の一番上では使い方として、HiisiさんのWEBで教えていただいた方法で使っていましたが、ひとつ悩みがありました。それは、まだ導入していないスクリプトでも有効にになってしまうことでした。

今までの使い方;下記の定義を追加する。
-------------------------------------
try:
    import appuifw2
    appuifw.Listbox = appuifw2.Listbox
except ImportError:
    pass
--------------------------------------

 この場合の悩みは
(1)スクリプトからインポートしたモジュールで使っていると、親モジュールでも有効になってしまう。親モジュールでも導入していれば良いのですが、そうでない場合問題です(*1)。

(2)導入したスクリプトを実行した後、Pythonを終了させずに次のスクリプトを実行すると、導入していないスクリプトでも有効になってしまう。(*1)

 *1:普通なら問題ないのですが、前回、前前回の記事のように、エラー対策を入れてないスクリプトで使うと、Pythonがダウンしてしまうことがあります。

 定義の場所変更(クラスの中に限定にしたい)、定義の再定義、DEL文追加、、とか色々やったのですが駄目でした。

 で、(エラー文を見ながら)最後に考えたのは、上記の方法はメソッドの定義を置き換えているが、単に名称の置き換えをしたらどうかと考えました。

新しい使用法:下記定義を追加する。
-----------------------------------------
try:
    import appuifw2
    appuifw = appuifw2
except ImportError:
    pass
-----------------------------------------

二つの方法の違いは、二つの文の違いにあります。
  appuifw.Listbox = appuifw2.Listbox
  appuifw = appuifw2

 とりあえず、いくつかのスクリプトでテストしたところでは希望通りの動きになりました。今までappuifw2を入れ込んできたスクリプトを変更して、やっとWEBに載せられそうです。

注1:使用法の追記 (2009-04-28)
  上記の新しい方法で、どれも問題なく動きました。appuifw2に無い機能は、そのままappuifwにパスされるようです。
 しかし、何となく気持ちが悪い場合は下記のような使い方が良いのかもしれません。この方法では、中の方まで手を加えないといけないのですが、どちらにしろ中の方まで対策しないとPython自体が落ちてしまう問題があるので、合わせて書き換えれば良いと思います。

----------今後の使用を考えている方法-------------------------
#先頭のインポート部分
appuifw2_exist = 0
try:
    import appuifw2
    appuifw2_exist = 1
except ImportError:
    appuifw2_exist = 0

#実際に定義している部分
    if appuifw2_exist == 1:
        self.lb = appuifw2.Listbox(self.entries, self.lbox_observe)
    else:
        self.lb = appuifw.Listbox(self.entries, self.lbox_observe)
--------------------------------------------------------------

 これが一番素直な方法かと思います。

 

|

« HP200LXと車の親しい関係 | トップページ | 5800XM のファイルブラウザ »

Python」カテゴリの記事

アプリケーション」カテゴリの記事

携帯電話」カテゴリの記事

コメント

コメントを書く



(ウェブ上には掲載しません)




トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/513620/44814003

この記事へのトラックバック一覧です: 5800XM でappuifw2を使う (python) その3(その2で終わらなかった):

« HP200LXと車の親しい関係 | トップページ | 5800XM のファイルブラウザ »