Если вы хотите что-то сделать, когда пользователь нажимает ввод, только если фокус находится на виджете ввода, просто добавьте привязку к виджету ввода. Он будет срабатывать только в том случае, если этот виджет имеет фокус. Например:
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()
Обратите внимание на разницу между ними: в первом примере обработчик будет вызываться только тогда, когда вы нажимаете клавишу возврата в первом виджете входа. Нет необходимости проверять, какой виджет имеет фокус. Во втором примере обработчик будет вызываться независимо от того, какой виджет имеет фокус.
Оба решения хороши в зависимости от того, что вам действительно нужно, чтобы произошло. Если ваша главная цель — делать что-то только тогда, когда пользователь нажимает клавишу возврата в определенном виджете, используйте первое. Если вам нужна глобальная привязка, но в этой привязке нужно сделать что-то другое в зависимости от того, что имеет или не имеет фокус, выполните последний пример.
person
Bryan Oakley
schedule
06.09.2009