我试图创建一个动态更新的搜索框,而不是每隔x毫秒轮询一次条目小部件,我试图使用键盘绑定来获取条目小部件的内容,只要键盘上的一个键是压:
from tkinter import *
root = Tk()
def callback():
result = searchbox.get()
print(result)
#do stuff with result here
searchbox = Entry(root)
searchbox.pack()
searchbox.bind("<Key>", lambda event: callback())
root.mainloop()
我的问题是searchbox.get()总是在用户按下的键被添加到搜索框之前执行,这意味着结果是在按下键之前而不是之后搜索框的内容。 例如,如果我输入&#39; hello&#39;在搜索框中,我会看到以下内容:
>>>
>>> h
>>> he
>>> hel
>>> hell
提前致谢。
答案 0 :(得分:1)
没有必要使用绑定。您可以将StringVar
与窗口小部件相关联,并在StringVar
上添加跟踪。每当值发生变化时,跟踪都会调用您的函数,无论它是从键盘还是鼠标或其他任何东西发生变化。
这是您的代码,修改为使用带跟踪的变量:
from tkinter import *
root = Tk()
def callback(*args):
result = searchbox.get()
print(result)
#do stuff with result here
var = StringVar()
searchbox = Entry(root, textvariable=var)
searchbox.pack()
var.trace("w", callback)
root.mainloop()
有关传递给回调的参数的信息,请参阅What are the arguments to Tkinter variable trace method callbacks?
为了更好地理解为什么你的绑定似乎总是一个字符落后,请参阅Basic query regarding bindtags in tkinter的接受答案