Musím zavést ListBox pro mobil. Jediné relevantní prvky jsou nahoru a dolů šipkami. Listbox by měla zobrazovat jako mnoho řádků položek ze seznamu, jak se vejde na obrazovku (screen_rows), by měla být jedna řada highighted (sel_row) a na displeji by měl zabalit, pokud uživatel zmáčkne šipku nahoru, když je první položka zvýrazněna nebo šipky dolů pokud je zvýrazněna poslední položka (to znamená, že se poslední položka by měla být zobrazeny a zvýrazněny v případě, že uživatel narazí, když je zvýrazněna první položka). Šipka nahoru upozorňuje na předchozí položku a šipka dolů upozorňuje na další položku.
Já jsem dal něco dohromady, ale jsem znepokojen jsem něco uniklo při testování. Musí se jednat o standardní způsob, jak to udělat, vzhledem k tomu, prevalence listboxes venku.
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: po každé funkci volám funkci překreslení obrazovky, které překreslí obrazovku top_item nahoře a SEL-řádku zvýrazněny.
Přidal jsem pseudo-kódu tag, v případě, že někdo má verze v něco, co je to python.













