【发布时间】:2010-11-26 00:50:05
【问题描述】:
from Tkinter import *
app = Tk()
text_field = Entry(app)
text_field.pack()
app.mainloop()
我希望能够检查text_field 当前是否被选中或聚焦,以便我知道当用户按下回车时是否对其内容进行处理。
【问题讨论】:
标签: python tkinter focus tkinter-entry
from Tkinter import *
app = Tk()
text_field = Entry(app)
text_field.pack()
app.mainloop()
我希望能够检查text_field 当前是否被选中或聚焦,以便我知道当用户按下回车时是否对其内容进行处理。
【问题讨论】:
标签: python tkinter focus tkinter-entry
如果您只想在用户按下回车键时仅在焦点位于条目小部件上时执行某些操作,只需将绑定添加到条目小部件即可。仅当该小部件具有焦点时才会触发。例如:
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()
注意两者之间的区别:在第一个示例中,仅当您在第一个条目小部件中按回车时才会调用处理程序。无需检查哪个小部件具有焦点。在第二个示例中,无论哪个小部件具有焦点,都会调用处理程序。
这两种解决方案都很好,具体取决于您真正需要发生的事情。如果您的主要目标是仅在用户按下特定小部件中的返回时执行某些操作,请使用前者。如果您想要一个全局绑定,但在该绑定中根据是否有焦点执行不同的操作,请执行后一个示例。
【讨论】:
<FocusIn> 上设置了绑定。