Как вы проверяете, имеет ли виджет фокус в Tkinter?

from Tkinter import * app = Tk() text_field = Entry(app) text_field.pack() app.mainloop() 

Я хочу, чтобы проверить, выбрано или сфокусировано ли text_field , чтобы я знал, делать что-либо с его содержимым, когда пользователь нажимает клавишу ввода.

One Solution collect form web for “Как вы проверяете, имеет ли виджет фокус в Tkinter?”

Если вы хотите что-то сделать, когда пользователь нажимает кнопку ввода, только если фокус находится на виджере ввода, просто добавьте привязку к виджету ввода. Он будет срабатывать только в том случае, если у этого виджета есть фокус. Например:

 >>> from Tkinter import * >>> root=Tk() >>> e1=Entry(root) >>> e1.pack() >>> e2=Entry(root) >>> e2.pack() >>> def handleReturn(event): ... print "return: event.widget is",event.widget ... print "focus is:", root.focus_get() ... >>> e1.bind("<Return>", handleReturn) 

Обратите внимание, что обработчик вызывается только в том случае, если первая запись имеет фокус при нажатии на возврат.

Если вы действительно хотите глобальную привязку и вам нужно знать, какой виджет имеет фокус, используйте метод focus_get () для корневого объекта. В следующем примере привязка помещается в "." (основной пупок), чтобы он срабатывал независимо от того, что сосредоточено:

 >>> from Tkinter import * >>> root=Tk() >>> e1=Entry(root) >>> e1.pack() >>> e2=Entry(root) >>> e2.pack() >>> def handleReturn(event): ... print "return: event.widget is",event.widget ... print "focus is:",root.focus_get() ... >>> root.bind("<Return>",handleReturn) 

Обратите внимание на разницу между ними: в первом примере обработчик будет вызываться только при нажатии возврата в первом виджетах ввода. Нет необходимости проверять, какой виджет имеет фокус. Во втором примере обработчик будет вызван независимо от того, какой виджет имеет фокус.

Оба решения хороши в зависимости от того, что вам действительно нужно. Если ваша главная цель – только что-то сделать, когда пользователь нажимает кнопку возврата в конкретном виджете, используйте первую. Если вы хотите глобальную привязку, но в этой привязке делаете что-то другое, основанное на том, что имеет или не имеет фокуса, сделайте последний пример.

Python - лучший язык программирования в мире.