python - 您如何检查小部件是否在 Tkinter 中具有焦点?

标签 python tkinter focus tkinter-entry

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/

相关文章:

python - 将连续特定值的第一行保留在 pandas 数据框中?

python-3.x - 在 tkinter 屏幕上执行 ImageGrab

Python:删除 TKinter 框架

python - 清除 Tkinter 条目文本 - 所以新文本看起来很新?

python - 使用 Python minidom 读取 XML 并遍历每个节点

python - 从 python 调用时出现段错误,但从命令行正常运行

python - RandomizedSearchCV 中 fit_params 的含义

html - 如何通过使用 :focus? 更改其属性使字段保持在同一个位置

wpf - 焦点未正确进入目标用户控件

javascript - contentEditable div 显示 : none/block focus problem on Chrome