Θα πρέπει να εφαρμόσει ένα πλαίσιο λίστας για ένα κινητό. Οι μόνοι σχετικοί έλεγχοι βρίσκονται πάνω και κάτω βέλη. Το πλαίσιο λίστας πρέπει να εμφανίζει όσες σειρές στοιχεία από μια λίστα, όπως θα ταιριάζει στην οθόνη (screen_rows), μία σειρά θα πρέπει να highighted (sel_row) και η οθόνη θα πρέπει να τυλίξετε αν ο χρήστης πατήσει επάνω βέλος, όταν το πρώτο στοιχείο έχει επισημανθεί ή κάτω βέλος εάν το τελευταίο στοιχείο έχει επισημανθεί (δηλαδή, θα πρέπει να εμφανίζεται το τελευταίο στοιχείο και υπογράμμισε αν ο χρήστης πατήσει όταν το πρώτο στοιχείο έχει επισημανθεί). Πάνω βέλος επισημαίνει το προηγούμενο στοιχείο και κάτω βέλος επισημαίνει το επόμενο στοιχείο.
Έχω βάλει κάτι μαζί, αλλά ανησυχώ έχω χάσει κάτι στις δοκιμές. Πρέπει να υπάρχει ένας τυπικός τρόπος για να γίνει αυτό, με δεδομένη την επικράτηση της listboxes εκεί έξω.
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: Μετά από κάθε λειτουργία που εγώ αποκαλώ μια λειτουργία οθόνης ανασχηματισμού, που επανασχεδιάζει την οθόνη με top_item στην κορυφή και sel-σειρά υπογράμμισε.
Έχω προσθέσει μια ετικέτα ψευδο-κώδικα, σε περίπτωση που κάποιος έχει μια έκδοση σε κάτι που δεν είναι python.













