2013-06-04 2 views
0

Этот код является попыткой привязать команду к кадру, т.е. когда нажата клавиша «Escape», окно должно быть уничтожено.Почему метод .bind() работает с виджетом фрейма в Tkinter?

from tkinter import * 
from tkinter import ttk 

root=Tk() 
root.geometry("400x400") 

frame1=ttk.Frame(root) 
frame1.pack() 

def Exit(event): 
    root.destroy() 

frame1.bind("<Escape>", Exit) 

root.mainloop() 

если frame1.bind() заменяется root.bind(), код работает, как я бы ожидать, что она. Почему не работает то, что я написал выше?

ответ

4

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

Попробуйте установить фокус с помощью frame1.focus_set()

+0

А, фантастически. Так что изменение фокуса влияет на что-то еще? Какие виджетов обычно имеют фокус? – rjmcf

+0

будет использовать wigits с использованием метода 'take_focus()' mess? – rjmcf

+0

Изменение фокуса не влияет ни на что другое. Виджеты, которые фокусируются, - это любые виджеты, которые принимают входные данные - текстовый виджет, виджет ввода и т. Д. Метод 'take_focus()' не «беспорядок» сам по себе, но он, безусловно, может изменить поведение, поскольку оно документировано делать. –

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