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
小部件,但所有小部件的绑定机制都是相同的。
我试图在按键后执行功能。问题是如果我使用此代码:
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
小部件,但所有小部件的绑定机制都是相同的。