2012-01-20 33 views
2

我在互聯網上發現了一個有趣的自動填充小部件類 - 我已經剝離到基本要素 - 使我枯燥的python 2.7 tkinter入口窗口自動填充入口窗口。tkinter自動填充小部件小寫偏見

from Tkinter import* 

class AutocompleteEntry(Entry): 

    def set_completion_list(self, completion_list): 
     self._completion_list = completion_list 
     self._hits = [] 
     self._hit_index = 0 
     self.position = 0 
     self.bind('<KeyRelease>', self.handle_keyrelease)    

    def autocomplete(self, delta=0): 
     if delta: 
      self.delete(self.position,END) 
     else: 
      self.position = len(self.get()) 
     _hits = [] 
     for element in self._completion_list: 
      if element.startswith(self.get().lower()): 
       _hits.append(element) 
       if _hits != self._hits: 
         self._hit_index = 0 
         self._hits=_hits 
     if _hits == self._hits and self._hits: 
       self._hit_index = (self._hit_index + delta) % len(self._hits) 
     if self._hits: 
       self.delete(0,END) 
       self.insert(0,self._hits[self._hit_index]) 
       self.select_range(self.position,END) 

    def handle_keyrelease(self, event): 
     if len(event.keysym)== 1: 
      self.autocomplete() 

class Code: 
    def __init__(self, parent): 
     self.myParent = parent 
     self.main_frame = Frame(parent, background="light blue") 
     self.main_frame.pack(expand=YES, fill=BOTH) 

     test_list = ('test', 'type', 'true', 'tree') 

     self.enter = AutocompleteEntry(self.main_frame, width=30) 
     self.enter.set_completion_list(test_list) 
     self.enter.pack(side=LEFT, expand=NO) 



root = Tk() 
code = Code(root) 
root.mainloop() 

偉大工程,一個惱人的警告:看來列表,它的自動完成引用是對小寫單詞偏見。此片段的工作原理如下:

test_list = ('test', 'type', 'true', 'tree') 

將列表更改爲大寫,自動完成功能消失。

test_list = ('Test', 'Type', 'True', 'Tree') 

我已經回到原來的互聯網代碼http://tkinter.unpythonic.net/wiki/AutocompleteEntry,它顯示了同樣的缺陷。如何更改自動填充小部件代碼以消除這種偏見,允許它接受帶有大寫和小寫字詞的列表?

回答

3

嘗試從

if element.startswith(self.get().lower()): 

或刪除

.lower()

進行匹配不區分大小寫:

if element.lower().startswith(self.get().lower()): 

將轉換你的 輸入字符串變成小寫字母,然後列表值變成小寫字母,以便在任何時候輸入相同的字母即使情況關閉也能進行匹配。