Сказать, что виджет имеет фокус, означает, что ввод с клавиатуры в данный момент направлен на этот виджет.
Под обходом фокуса мы понимаем последовательность виджетов, которые будут посещены, когда пользователь будет переходить от виджета к виджету с помощью клавиши табуляции. Правила этой последовательности приведены ниже.
Вы можете перемещаться в обратном направлении с помощью комбинации клавиш Shift-Tab.
Виджеты Entry и Text предназначены для приема ввода с клавиатуры, и если виджет Entry или Text в данный момент находится в фокусе, то все символы, которые вы введете в него, будут добавлены в его текст. Клавиши редактирования, такие как ← и →, будут иметь свои обычные эффекты.
Поскольку виджеты Text могут содержать символы табуляции, для перемещения фокуса в обход текстового виджета необходимо использовать специальную последовательность клавиш Control-Tab.
Большинство других типов виджетов обычно посещаются при обходе фокуса, и когда они имеют фокус:
Виджеты Button можно "нажать", нажав пробел.
Виджеты Checkbutton можно переключать между установленным и снятым состояниями с помощью пробела.
В виджетах Listbox клавиши ↑ и ↓ прокручивают строку вверх или вниз; клавиши PageUp и PageDown прокручивают страницы; а пробел выбирает текущую строку или снимает ее, если она уже была выбрана.
Нажатием пробела можно установить виджет Radiobutton.
Горизонтальные виджеты Scale реагируют на клавиши ← и →, а вертикальные - на ↑ и ↓.
В виджете Scrollbar клавиши PageUp и PageDown перемещают полосу прокрутки по страницам. Клавиши ↑ и ↓ перемещают вертикальные полосы прокрутки на единицы (units), а клавиши ← и → перемещают горизонтальные полосы прокрутки на единицы.
Многие виджеты снабжены контуром, называемым выделением фокуса, который показывает пользователю, какой виджет выделен. Обычно это тонкая черная рамка, расположенная сразу за границей виджета (если таковая имеется). Для виджетов, которые обычно не выделяются (в частности, фреймы, ярлыки и меню), вы можете установить ненулевое значение параметра highlightthickness, чтобы сделать выделение видимым.
Вы также можете изменить цвет подсветки фокуса с помощью опции highlightcolor.
Виджеты класса Frame, Label и Menu обычно не посещаются фокусом. Однако вы можете установить для их опции takefocus значение 1, чтобы включить их в обход фокуса. Вы также можете исключить любой виджет из обхода фокуса, установив для его опции takefocus значение 0.
Порядок, в котором клавиша табуляции обходит виджеты, следующий:
Для виджетов, которые являются дочерними виджетами одного родителя, фокус перемещается в том же порядке, в котором виджеты были созданы.
Для родительских виджетов, содержащих другие виджеты (например, фреймы), фокус сначала посещает родительский виджет (если только его опция takefocus не равна 0), а затем рекурсивно посещает дочерние виджеты в порядке их создания.
Подведем итог: чтобы установить порядок обхода фокуса вашими виджетами, создайте их в этом порядке. Удалите виджеты из порядка обхода, установив их опции takefocus в 0, а для тех, чья опция takefocus по умолчанию равна 0, установите ее в 1, если хотите добавить их в порядок.
Выше описано стандартное функционирование фокуса ввода в Tkinter. Существует и другой, совершенно отличный способ работы с ним - это возможность направить фокус туда, куда перемещается мышь. Для этого обратитесь к методу .tk_focusFollowsMouse() в разделе 26, "Универсальные методы виджетов".
Вы также можете добавлять, изменять или удалять функции любой клавиши на клавиатуре внутри любого виджета с помощью привязки к событиям. Подробности см. в разделе 54, "События".