モバイル用のリストボックスを実装する必要があります。関連するコントロールは上下の矢印キーのみです。リストボックスは、リストから画面に収まる数の項目の行を表示する必要があり (screen_rows)、1 つの行を強調表示し (sel_row)、最初の項目が強調表示されているときにユーザーが上向き矢印または下向き矢印を押すと、表示が折り返される必要があります。最後の項目が強調表示されている場合 (つまり、最初の項目が強調表示されているときにユーザーがヒットした場合、最後の項目が表示され、強調表示されます)。上矢印は前の項目を強調表示し、下矢印は次の項目を強調表示します。
私は何かをまとめましたが、テストで何かを逃したのではないかと心配しています。リストボックスが普及していることを考えると、これを行う標準的な方法が必要です。
def up_key(self):
if self.sel_row > 0:
self.sel_row -= 1
elif self.top_item > 0: # top_item is the index of the first list item
self.top_item -= 1
elif self.top_item == 0:
if self.n_lines >= self.screen_rows: # n_lines is the number of items in the list
self.top_item = self.n_lines - self.screen_rows
self.sel_row = min(self.screen_rows-1, self.n_lines-1)
else:
self.top_item = 0
self.sel_row = self.n_lines-1
def down_key(self):
if self.sel_row < self.screen_rows-1 and self.sel_row < self.n_lines-1:
self.sel_row += 1
elif self.sel_row == self.screen_rows-1:
bottom_item = self.top_item + self.screen_rows
if bottom_item == self.n_lines:
self.top_item = 0
self.sel_row = 0
if bottom_item < self.n_lines:
self.top_item += 1
elif self.sel_row == self.n_lines-1:
self.top_item = 0
self.sel_row = 0
def set_pos(self, pos): # display item with index pos
if pos < 0:
pos = 0
elif pos >= self.n_lines:
pos = self.n_lines - 1
if pos < self.screen_rows:
self.top_item = 0
self.sel_row = pos
else:
self.sel_row = min(self.screen_rows, self.n_lines)//2 - 1
self.top_item = pos - self.sel_row
if self.top_item >= self.n_lines - self.screen_rows:
self.top_item = self.n_lines - self.screen_rows - 1
self.sel_row = pos - self.top_item - 1
編集: 各関数の後、画面の再描画関数を呼び出します。これにより、top_item が上部にあり、sel-row が強調表示された状態で画面が再描画されます。
誰かが Python 以外のバージョンを持っている場合に備えて、擬似コード タグを追加しました。