将所有键盘键绑定到 entry.get() tkinter
Binding all keyboard keys to entry.get() tkinter
我正在尝试创建一个动态更新的搜索框,而不是每 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() 总是在用户按下的键被添加到搜索框之前执行,这意味着结果是按下键之前而不是之后搜索框的内容。
例如,如果我在搜索框中键入 'hello',我会看到以下打印内容:
>>>
>>> h
>>> he
>>> hel
>>> hell
提前致谢。
无需使用绑定。您可以将 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()
有关传递给回调的参数的信息,请参阅
为了更好地理解为什么您的绑定似乎总是落后一个字符,请参阅 Basic query regarding bindtags in tkinter
的公认答案
我正在尝试创建一个动态更新的搜索框,而不是每 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() 总是在用户按下的键被添加到搜索框之前执行,这意味着结果是按下键之前而不是之后搜索框的内容。 例如,如果我在搜索框中键入 'hello',我会看到以下打印内容:
>>>
>>> h
>>> he
>>> hel
>>> hell
提前致谢。
无需使用绑定。您可以将 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()
有关传递给回调的参数的信息,请参阅
为了更好地理解为什么您的绑定似乎总是落后一个字符,请参阅 Basic query regarding bindtags in tkinter
的公认答案