« ギター合奏のCDと楽譜 | トップページ | 5800XM とpyS60uiutil の互換性 (Python) »

2009年4月23日 (木)

5800XM でappuifw2を使う (python) その2(一応まとめ?)

2009-04-23(木)晴れ、のち曇り
 昨日の暑いような日と変わって、爽やかな温度の一日でした。

 さて、前回も色々書いた「5800XMでappuifw2を使う」件ですが、前回より若干分かって、対症療法も若干スマート(と言って良いのか?)になったので、まとめとして書いてみました。
 前回の記事はこちらです。
   5800XM でappuifw2を使う (python)

 なお、Nokia 5800 XMは OSがS60 5th であり、appuifw2 は S60 3rd 用らしいので、本来使って良い環境ではないのかもしれません。しかしスクロールバーは、キー無しの携帯電話でこそ使いたいはずです。そう言う意味で、しつこく使ってみているわけです。その辺(OSの違い)を承知の上でお読み下さい。

 さて、動作させて色々とトレースをした結果、エラーになるのは次の場合のようです。ただ、appuifw2のコードを見たわけではありませんので、あくまでテストしてエラーの出る箇所を特定しただけです。

エラーの発生条件:
 新しいリストを作成して set_list でリスト切り替えを行ったとき、次の条件が成立するときにエラーになります(Pythonがダウンしてしまう)。
 ・以前のリストが表示されている画面上で、16番目以降の項目を選択している。
 ・新しく作成したリストが、上記の選択されている項目の番号より短いとき。

図3に、この関係を記してみました。(図はクリックすると拡大します。)

Appuifw2_3

 対症療法は以下の通りです。

(1)前回書いたように、リストの再作成が発生したら毎回「appuifw2.Listbox」の設定を
  行う。(これにより、ポインタが0に戻るから)

(2)リスト作成時に、ダミー項目を入れて長くする(全部同じ長さが良いか)。

(3)新しいリストを設定する前に、旧リスト(か長いダミーリスト)を使い、set_list(list,0)
  でポインタを0に戻す。

 画面を見ていて一番違和感がないのは(1)です。が、なんとなくしっくりこないのは、本来一回やればよいはずの「appuifw2.Listbox」を毎回やる事でしょうか。

 ということで、(3)で旧リスト(現在表示されているリスト)を使って、ポインタを戻すことにしました。一瞬、旧リストの先頭部分が表示されますが、これが良いかなと思います。
 (2)は、不要な項目がリスト上に表示されますから本来的ではないでしょう。

 対策の図を載せてみました。

Appuifw2_4_2

 注2の部分が対策の部分です。

------------------------------------------------------------------------
注意:
 前リストのコピー作成のときに注意が必要です。例えば、
  list_bak = list
 とやるといいように見えますが、まずいかもしれません。listの全データが、全く新しいlist_bakに代入されるのではなく、ポインタで指示されるだけかもしれません。この場合は、片方を変更すると他方も変わってしまいます。絶対に新しく作られる方法が必要です。

 これなら大丈夫な例:
list_bak = []
for x in list:
    list_bak.append(x)

あるいは
list_bak = [x for x in list]

あたりでしょうか。
-------------------------------------------------------------------------

 色々やってきましたが、当面はこれで使うことになりそうです。後は、S60 5th対応になるか、Python 1.9.x(あるいはPython 2.0.x ?)で、完全にタッチスクリーンタイプ携帯に対応されるのを使うか、、ですね。

 

|

« ギター合奏のCDと楽譜 | トップページ | 5800XM とpyS60uiutil の互換性 (Python) »

Python」カテゴリの記事

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

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

コメント

コメントを書く



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




« ギター合奏のCDと楽譜 | トップページ | 5800XM とpyS60uiutil の互換性 (Python) »