我正在尝试使用 Python Tkinter 实现自动完成功能。我面临一个非常奇怪的问题 - 当我获得自动完成文本并尝试输入相同的文本时,窗口的整个内容都会消失。
from Tkinter import *
def getCommand(*args):
global text
x = text.get("MARK",END)
text.insert(END,"\n")
text.insert(END,"command>")
text.mark_set("insert",END)
text.mark_set("MARK",INSERT)
text.mark_gravity("MARK",LEFT)
text.see(END)
return 'break'
validkeysymchars = []
validkeysymchars = validkeysymchars + map(chr, range(65,91))
validkeysymchars = validkeysymchars + map(chr, range(97,123))
def handle_keyrelease(event):
global text
if event.keysym in validkeysymchars:
for x in ['testcommand']:
strtocmp = text.get("MARK","end")
strtocmp = strtocmp.encode('ascii','ignore')
strtocmp = strtocmp.strip()
if x.startswith(strtocmp):
currpos = text.index(INSERT)
text.insert(END,x[len(strtocmp):])
text.tag_add(SEL,currpos,"%s+%dc"%(currpos,len(x)-len(strtocmp)))
text.mark_set("insert",currpos)
root = Tk()
text = Text(root)
text.pack()
text.insert(END,"command>")
text.mark_set("MARK",INSERT)
text.mark_gravity("MARK",LEFT)
text.focus()
text.bind("<Return>",getCommand)
text.bind("<KeyRelease>",handle_keyrelease)
root.mainloop()
因此,在此代码中,如果您键入t
,小部件将显示testcommand
为自动完成的命令,按回车键,如果您键入t
,它将再次显示相同的命令,但现在按下任何其他字符将导致上一步中的命令消失从小部件。有人可以解释为什么我会观察这种行为。