from Tkinter import *
app = Tk()
text_field = Entry(app)
text_field.pack()
app.mainloop()
我希望能够检查 text_field
当前是否被选中或获得焦点,以便我知道在用户按下 enter 时是否对其内容执行某些操作。
最佳答案
如果您只想在焦点位于条目小部件上时用户按下回车键时执行某些操作,只需将绑定(bind)添加到条目小部件即可。它只会在该小部件具有焦点时触发。例如:
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()
请注意,只有当您按回车键时第一个条目具有焦点时,才会调用处理程序。
如果您确实需要全局绑定(bind)并且需要知道哪个小部件具有焦点,请对根对象使用 focus_get() 方法。在以下示例中,绑定(bind)放在“.”上。 (主要的顶层)以便无论焦点是什么它都会触发:
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()
请注意两者之间的区别:在第一个示例中,仅当您在第一个条目小部件中按回车键时才会调用处理程序。无需检查哪个小部件具有焦点。在第二个示例中,无论哪个小部件获得焦点,都会调用处理程序。
这两种解决方案都很好,具体取决于您真正需要发生的事情。如果您的主要目标是仅当用户在特定小部件中按下返回键时才执行某些操作,请使用前者。如果您想要一个全局绑定(bind),但在该绑定(bind)中根据有或没有焦点做一些不同的事情,请执行后一个示例。
关于python - 您如何检查小部件是否在 Tkinter 中具有焦点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1385921/