एक लिस्टबॉक्स लागू

वोट
0

मैं एक मोबाइल के लिए एक लिस्टबॉक्स को लागू करने की जरूरत है। केवल प्रासंगिक नियंत्रण और नीचे तीर कुंजियों हैं। लिस्टबॉक्स स्क्रीन (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 प्रकाश डाला कहते हैं।

मैं एक छद्म कोड टैग, मामले में किसी को कुछ है कि अजगर नहीं है में एक संस्करण है जोड़ दिया है।

20/10/2009 को 14:24
का स्रोत उपयोगकर्ता
अन्य भाषाओं में...                            


1 जवाब

वोट
1

कुछ अजगर कार्यक्रमों खरोंच से listboxes लागू - वे सामान्य रूप से सिर्फ मौजूदा उपकरणकिटें से ले जाया जाता है। ! क्यों कोई वास्तविक पार टूलकिट "मानक" यही कारण है कि समझा जा सकता है -)

अपने कोड के लिए आ रहा है, मैं कल्पना set_posके नाम से जाना सही होने के बाद या तो मतलब है up_keyया down_keyसमाप्त कर रहे हैं (आप इस पूरी तरह से स्पष्ट नहीं बनाते हैं)।

मेरी मुख्य चिंता repetitiousness और अपने दोनों के बीच विषमता होगा _keyदिनचर्या। निश्चित रूप से यह देखते हुए कि अपने चश्मा ऊपर और चाबी नीचे के लिए बहुत समान हैं, आप एक ही समारोह है जो एक "वेतन वृद्धि" तर्क या तो +1 या -1 लेता है, को सौंपना चाहते हैं। यही कारण है कि आम समारोह पहला करते सकता है self.sel_row += increment, तो तुरंत मामले ऐसे में वापसी sel_rowअभी भी ठीक है, यानी if self.top_item <= self.sel_row < self.top_item + self.screen_rows; अन्यथा ऐसे मामलों में जहां से निपटने के sel_rowवर्तमान में प्रदर्शित क्षेत्र से बाहर निकल गया है का समायोजन करके, self.top_itemबाहर निकलने कि अगर wraparound के लिए, या अंत में wraparound मामलों से निपटने की कोई जरूरत नहीं होती है।

मैं लागू करने के लिए "फ्लैट नेस्ट से बेहतर है" बार-बार फार्म के निर्माणों का उपयोग करके उत्सुक हो जाएगा "कुछ आवश्यक राज्य मौका करते हैं, अगर चीजें अब ठीक, वापसी कर रहे हैं" के बजाय तार्किक और अधिक जटिल की तुलना में "अगर एक साधारण बात कर ठीक हो जाएगा , तो साधारण बात करते हैं, किसी और अगर थोड़ा और अधिक जटिल है, लेकिन भयानक नहीं कुछ की जरूरत है, तो जटिल कुछ करना; किसी और अगर हम एक बहुत जटिल मामले में कर रहे हैं, वास्तव में जटिल समस्या "से निपटने - उत्तरार्द्ध दूर है अधिक त्रुटि-प्रवण और कठिन किसी भी मामले में पालन करने के लिए।

20/10/2009 को 16:30
का स्रोत उपयोगकर्ता

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more