繁体   English   中英

Tkinter 中的条目小部件<key>绑定</key>

[英]Entry Widget in Tkinter with <Key> Bind

谁能帮我确定为什么打印语句似乎落后于该代码的输入? 如果您运行这个简短的程序并在输入条目小部件中键入 1,2,3,4,5,则触发该方法的事件将获取 typed_string Stringvar 的当前值,但它比输入滞后 1。 有人可以解释为什么吗? 更好的是,有没有人知道任何对生成文本的条目小部件的按键都会调用输入变量的显示值的方式? 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()

显示端子 output 的输入字段

如果您更换:

    self.new_entry.bind("<Key>",self.check_string)

    self.new_entry.bind("<KeyRelease>",self.check_string)

它做我认为你想要它做的事情。

原因:在该键的字符添加到StringVar变量之前触发了Key事件; 或者更准确地说,在按键被处理之前,如果它是一个普通的可打印按键,其结果之一就是将按键的字符添加到变量中。 KeyRelease事件在按键处理完成触发,因此在您尝试打印字符时已将字符添加到变量中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM