我已编辑的代码的基础上,这两个来源,对我来说,我觉得这个工作得更好:
def handle_keyrelease(self, event):
"""event handler for the keyrelease event on this widget"""
if event.keysym == "BackSpace":
if self.position < self.index(END): # delete the selection
self.delete(self.position, END)
else:
#self.delete(self.index(INSERT), END)
self.position = self.index(END)
if event.keysym == "Left":
if self.position < self.index(END): # delete the selection
self.delete(self.position, END)
#else:
#self.position = self.position-1 # delete one character
#self.delete(self.position, END)
if event.keysym == "Right":
self.position = self.index(END) # go to end (no selection)
if event.keysym == "Down":
self.autocomplete(1) # cycle to next hit
if event.keysym == "Up":
self.autocomplete(-1) # cycle to previous hit
# perform normal autocomplete if event is a single key or an umlaut
if len(event.keysym) == 1:
self.autocomplete()
基本上,这是伊恩·魏瑟尔的版本。我在“backspace”键部分添加了if
子句,并删除了上面的注释行,以便用户返回并更正一些拼写错误。现在,如果用户返回并编辑了某些内容,则先前输入的其他文本将保持不变,如果用户按下(仅删除剩余的自动完成但保留其余的完整内容)或退格(删除自动完成和一个字符如预期的那样)。如果用户在文本中单击鼠标,则不会删除任何内容。