मैं एक मोबाइल के लिए एक लिस्टबॉक्स को लागू करने की जरूरत है। केवल प्रासंगिक नियंत्रण और नीचे तीर कुंजियों हैं। लिस्टबॉक्स स्क्रीन (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
संपादित करें: प्रत्येक कार्य के बाद मैं एक redraw स्क्रीन समारोह है, जो शीर्ष और sel-पंक्ति पर top_item के साथ स्क्रीन redraws प्रकाश डाला कहते हैं।
मैं एक छद्म कोड टैग, मामले में किसी को कुछ है कि अजगर नहीं है में एक संस्करण है जोड़ दिया है।













