def autocomplete(self, delta=0):
"""autocomplete the Combobox, delta may be 0/1/-1 to cycle through possible hits"""
if delta: # need to delete selection otherwise we would fix the current position
self.delete(self.position, tkinter.END)
else: # set position to end so selection starts where textentry ended
self.position = len(self.get())
# collect hits
_hits = []
for element in self._completion_list:
box_value = self.get()
if element.lower().startswith(box_value.lower()): # Match case insensitively
_hits.append(element)
# if we have a new hit list, keep this in mind
if _hits != self._hits:
self._hit_index = 0
self._hits=_hits
# only allow cycling if we are in a known hit list
if _hits == self._hits and self._hits:
self._hit_index = (self._hit_index + delta) % len(self._hits)
# now finally perform the auto completion
if self._hits:
txt=self._hits[self._hit_index]
self.delete(0,tkinter.END)
self.insert(0,txt)
self.select_range(self.position,tkinter.END)
self.event_generate('<<ComboboxSelected>>')
else:
self.event_generate('<<NoHits>>')
评论列表
文章目录