Python Tkinter - 文本小部件在插入键之前运行功能

Python Tkinter - Text widget runnig function before inserting key

我试图在按键后执行功能。问题是如果我使用此代码:

text = tk.Text(root)
text.bind("<KeyPress>", lambda event:print(text.get(1.0, tk.END)))
text.pack()

当我按下第一个键时,没有打印任何内容。它在插入字符之前执行我的功能,我该如何避免呢? Whitout 使用 <KeyRelease> 谢谢!

一个简单的技术是 运行 您的代码 after_idle,这意味着当 mainloop 处理完所有未决事件时它 运行s。

这是一个例子:

import tkinter as tk

def do_something():
    print(text.get("1.0", "end-1c"))

root = tk.Tk()
text = tk.Text(root)
text.bind("<KeyPress>", lambda event: root.after_idle(do_something))
text.pack()

root.mainloop()

要更深入地解释为什么您的绑定似乎比您输入的内容滞后一个字符,请参阅 this answer to the question Basic query regarding bindtags in tkinter。该问题询问的是 Entry 小部件,但所有小部件的绑定机制都是相同的。