14
from Tkinter import *

app = Tk()
text_field = Entry(app)
text_field.pack()
app.mainloop()

我希望能够检查text_field当前是否被选中或聚焦,以便我知道当用户按下回车时是否对其内容进行处理。

4

1 回答 1

25

如果您只想在焦点位于条目小部件上时用户按下回车键时执行某些操作,只需将绑定添加到条目小部件即可。仅当该小部件具有焦点时才会触发。例如:

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()

请注意两者之间的区别:在第一个示例中,仅当您在第一个条目小部件中按 return 时才会调用处理程序。无需检查哪个小部件具有焦点。在第二个示例中,无论哪个小部件具有焦点,都会调用处理程序。

这两种解决方案都很好,具体取决于您真正需要发生的事情。如果您的主要目标是仅在用户按下特定小部件中的返回时执行某些操作,请使用前者。如果您想要一个全局绑定,但在该绑定中根据是否有焦点执行不同的操作,请执行后一个示例。

于 2009-09-06T15:32:23.830 回答