Jeg trenger å implementere en listeboksen for en mobil. De eneste relevante kontrollene er opp og ned piltastene. Listeboksen skal vise så mange rader med elementer fra en liste som får plass på skjermen (screen_rows), bør en rad bli highighted (sel_row) og skjermen skal brytes hvis brukeren treffer pil opp når det første elementet er uthevet eller pil ned hvis det siste elementet er uthevet (det vil si, det siste elementet skal vises og fremhevet hvis brukeren treffer opp når det første elementet er uthevet). Pil opp streker forrige element og pil ned streker neste element.
Jeg har satt noe sammen, men er bekymret for jeg har gått glipp av noe i testing. Det må være en standard måte å gjøre dette på, gitt utbredelsen av listboxes ute.
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
EDIT: etter hver funksjon å ringe en opptegning skjerm funksjon, som tegnes på skjermen med top_item ved toppen og sel-rad fremhevet.
Jeg har lagt en pseudo-kode tag, i tilfelle noen har en versjon i noe som ikke er Python.













