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,它顯示了同樣的缺陷。如何更改自動填充小部件代碼以消除這種偏見,允許它接受帶有大寫和小寫字詞的列表?