2009-09-06 4 views

ответ

16

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

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

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

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

+0

Возможно ли это, но не дожидаясь ввода нажатием. Например, когда пользователь просто выбирает запись для ввода чего-либо, можно ли узнать, что произошло? –

+1

@ MuhamedHuseinbašić: да, это возможно. –

+0

Как это сделать? : D Где я мог найти это? –

Смежные вопросы