« 電気料金、その後3 | トップページ | 光回線の勧誘、、そろそろうんざりしてきた »

2012年8月11日 (土)

5800XM Python 2.0.0 のリストボックスでスクロールをさせる

2012-08-11(土)晴れ/曇り、夕方から雨

 Python S60 2.0.0 では、タッチパネル携帯でリストボックスを使ってリストを表示させたときに、そのリストをスクロールさせる(液晶画面上で指を滑らせてリストをスクロールさせる)機能が入りました。ところが、私のNokia5800XMでは、このスクロールが動かないのです。この件については、何回か書いてきました。いまだに原因は分かりません。
 一度、ハードリセットをかけて、まっさらにしてから試してみたい気もするのですが、リセット後の環境設定のことを考えると、2の足を踏んでしまいます。それに、Python 2.0.0 を、どうしても使いたいわけではないし、、。

 このスクロールですが、全く動いていないわけではなく、スクロールバーの動きや、画面にさわったときに選択されて表示されるファイルを見ると、画面の裏ではスクロールされているが、それが画面表示に出てこない(画面表示が更新されない)ように見えます。そこで、無理矢理画面更新をして、スクロールを有効にする手段を考えてみました。

 その方法とは、、リストボックスでリストを表示させるときに、80ミリ秒位のタイマを起動して、タイムアウトする度に、強制的に画面更新をさせるのです。早い話が、一定時間毎に無理矢理、画面更新を指示するのです。なお、画面の表示をリストボックスからテキストに切り替えるときには、タイマをクリアします(これをやらないと、テキスト画面が出なくなる)。

--------画面をリストボックスに切り替えるときの処理、
タイマをスタートしてから切りかえます。

self.redrow_timer.cancel()
self.start_timer()
appuifw.app.body = self.lb



--------画面をテキストに切り替えるときの処理
タイマを止めてから切り替えます

self.redrow_timer.cancel()
appuifw.app.body = appuifw.Text()


---------タイマスタート処理
タイマスタートのためにコールされる処理です。タイムアウト時の処理にself.redrow()を指定しています。

def start_timer(self, value=0.08):
      self.redrow_timer.cancel()
      self.redrow_timer.after(value, lambda:self.redrow())

--------タイムアウトしたときの処理
タイムアウトしたときは、強制的に画面をリストボックスに切り替える命令を出します。タイマを再スタートさせておきます。

def redrow(self):
      appuifw.app.body = self.lb
      self.start_timer()

 これで、一定時間毎に画面が更新されるので、無理矢理、スクロールされた画面を表示させることができます。

Scym0209a  Scym0212a

 左が対策前です。画面が更新されないので、さわった行がいくつも赤く(選択されたようにみえる)なっていきます。右は、上記処理を入れたあとで、一応画面は更新されてゆきます。右のスクロールバーでも、画面をこすってでもスクロールできますが、赤く選択された行が画面から出るようなスクロールは出来ません。画面の上下の行に触って赤くしてからスクロールさせる必要があります。

 無理矢理、スクロールを有効にする事も出来ましたが、こんな無駄な処理を、各スクリプトに入れるわけにはいかないし、実用性のない対策でした。

 

|

« 電気料金、その後3 | トップページ | 光回線の勧誘、、そろそろうんざりしてきた »

Python」カテゴリの記事

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

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

コメント

コメントを書く



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




トラックバック

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

この記事へのトラックバック一覧です: 5800XM Python 2.0.0 のリストボックスでスクロールをさせる:

« 電気料金、その後3 | トップページ | 光回線の勧誘、、そろそろうんざりしてきた »