有人能帮我确定为什么print语句似乎落后于这段代码的输入吗?如果在输入条目小部件中运行此短程序并键入1、2、3、4、5,则触发该方法的事件将获得typed_string Stringvar的当前值,但它落后于输入。谁能解释一下原因吗?更好的是,是否有人知道任何对生成文本的条目小部件的按键都会调用输入变量的显示值?当前版本的python为3.8
import tkinter
from tkinter import *
class UI():
def __init__(self, master):
self.typed_string = StringVar()
self.typed_string.set("")
self.new_entry = tkinter.Entry(master, textvariable=self.typed_string)
self.new_entry.pack()
self.new_entry.bind("<Key>",self.check_string)
def check_string(self, event):
retrieved_string = self.typed_string.get()
print(retrieved_string, " was retrieved string")
print(self.new_entry.get(), " was get for entry widget")
def main():
root = Tk()
new_ui = UI(root)
root.mainloop()
if __name__ == '__main__':
main()
发布于 2021-03-07 22:47:35
如果您替换:
self.new_entry.bind("<Key>",self.check_string)
使用
self.new_entry.bind("<KeyRelease>",self.check_string)
它能做我认为你想做的事。
原因:键事件是在将该键的字符添加到StringVar变量之前触发的;或者更准确地说,在处理按键之前,结果之一是如果该键是普通的可打印键,则将该键的字符添加到该变量。KeyRelease事件在处理后触发,因此,在尝试打印字符时,该字符已经添加到变量中。
https://stackoverflow.com/questions/66035176
复制相似问题