将所有键盘键绑定到entry.get()tkinter

时间:2018-04-14 22:47:49

标签: python tkinter key-bindings

我试图创建一个动态更新的搜索框,而不是每隔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

提前致谢。

1 个答案:

答案 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的接受答案