from Tkinter import *
app = Tk()
text_field = Entry(app)
text_field.pack()
app.mainloop()
Я хочу проверить, выбрано или сфокусировано ли text_field
, чтобы я знал, нужно ли что-то делать с его содержимым при вводе пользователя.
from Tkinter import *
app = Tk()
text_field = Entry(app)
text_field.pack()
app.mainloop()
Я хочу проверить, выбрано или сфокусировано ли text_field
, чтобы я знал, нужно ли что-то делать с его содержимым при вводе пользователя.
Если вы хотите что-то сделать, когда пользователь нажимает ввод, только если фокус находится на виджете ввода, просто добавьте привязку к виджету ввода. Он будет срабатывать, только если этот виджет имеет фокус. Например:
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)
Обратите внимание, что обработчик вызывается только в том случае, если первая запись имеет фокус, когда вы нажимаете клавишу возврата.
Если вы действительно хотите глобальную привязку и хотите знать, какой виджет имеет фокус, используйте метод 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)
Обратите внимание на разницу между ними: в первом примере обработчик будет вызываться только при нажатии возврата в виджете первой записи. Нет необходимости проверять, какой виджет имеет фокус. Во втором примере обработчик будет вызываться независимо от того, какой виджет имеет фокус.
Оба решения хороши в зависимости от того, что вам действительно нужно. Если ваша основная цель - что-то делать только тогда, когда пользователь нажимает клавишу возврата в определенном виджете, используйте первый. Если вы хотите глобальную привязку, но в этой привязке сделайте что-то другое, основываясь на том, что имеет или не имеет фокуса, выполните последний пример.