from Tkinter import *
app = Tk()
text_field = Entry(app)
text_field.pack()
app.mainloop()
我希望能够检查text_field
当前是否被选中或聚焦,这样我就能知道当用户按下 Enter 键时是否需要对它的内容进行操作。from Tkinter import *
app = Tk()
text_field = Entry(app)
text_field.pack()
app.mainloop()
我希望能够检查text_field
当前是否被选中或聚焦,这样我就能知道当用户按下 Enter 键时是否需要对它的内容进行操作。如果您希望在用户输入框具有焦点时仅在用户按下回车键时执行某些操作,只需为该输入框添加绑定即可。当且仅当该小部件具有焦点时,它才会被触发。例如:
import tkinter as tk
root = tk.Tk()
e1 = tk.Entry(root)
e2 = tk.Entry(root)
e1.pack()
e2.pack()
def handleReturn(event):
print("return: event.widget is",event.widget)
print("focus is:", root.focus_get())
e1.bind("<Return>", handleReturn)
root.mainloop()
请注意,仅当第一个条目具有焦点时,按回车键时才会调用处理程序。
如果您确实需要全局绑定并且需要知道哪个小部件具有焦点,请在根对象上使用 focus_get() 方法。在以下示例中,将绑定放在“.”(主要顶级)上,以便无论有什么焦点都会触发:
import tkinter as tk
root = tk.Tk()
e1 = tk.Entry(root)
e2 = tk.Entry(root)
e1.pack()
e2.pack()
def handleReturn(event):
print("return: event.widget is",event.widget)
print("focus is:",root.focus_get())
root.bind("<Return>", handleReturn)
root.mainloop()
注意这两个示例之间的区别:在第一个示例中,只有当您在第一个输入小部件中按下回车键时才会调用处理程序。不需要检查哪个小部件具有焦点。在第二个示例中,无论哪个小部件具有焦点,都将调用处理程序。
根据您需要实际发生的情况,这两种解决方案都很好。如果您的主要目标是仅在用户在特定小部件中按下回车键时执行某些操作,请使用前者。如果您希望进行全局绑定,但在该绑定中根据具有或不具有焦点的内容执行不同的操作,请使用后者示例。