Управление фокусом ввода.
focus focus окно focus параметр арг арг ...
Команда focus используется для управления фокусом ввода Tk. В любой момент времени одно из окон на каждом экране находится в фокусе ввода; всякое событие нажатия или отпускания клавиши интерпретируются в этом окне. Обычно переключение фокуса между окнами верхнего уровня на экране осуществляется менеджером окон. Например, некоторые менеджеры окон автоматически переключают фокус на окно верхнего уровня, как только на него попадает курсор Мыши; другие устанавливают фокус только при щелчке на окне. Обычно менеджер окон устанавливает фокус только на окнах верхнего уровня, а переключением фокуса между подчиненными окнами занимается конкретное приложение.
Для каждого верхнего уровня Tk запоминает одно окно в фокусе (последнего наследника данного верхнего уровня, в которое попал фокус); когда менеджер окон переключает фокус на данный верхний уровень, Tk автоматически устанавливает его на запомненное окно. Внутри конкретного верхнего уровня Tk использует явное моделирование фокуса по умолчанию. Обычно перемещение курсора "Мыши" без изменения верхнего уровня не приводит к переключению фокуса; переключение происходит, лишь если его запросил примитив (например, в результате щелчка по кнопке "Мыши" ) или если пользователь нажал, например, клавишу Tab.
Неявная модель фокусировки создается процедурой Tcl tk_focusFollowsMouse; она меняет параметры конфигурации Tk таким образом, чтобы фокус устанавливался на окно при попадании на него курсора "Мыши".Процедуры Tcl tk_focusNext и tk_focusPrev устанавливают порядок переключения фокуса между окнами верхнего уровня. Эти процедуры определяют, помимо прочего, привязки по умолчанию к клавишам Tab и Shift-Tab.
Команда focus может принимать одну из следующих форм:
При получении фокуса ввода внутренним окном Tk фактически не устанавливает X фокус на это окно. X ведет себя таким образом, что фокус сохранится на окне верхнего уровня, которому подчиняется окно с фокусом. Однако Tk создает события FocusIn и FocusOut в точности, как если бы X фокус был на внутреннем окне. Такой подход порождает ряд трудностей при фактическом переключении X фокуса; то, что X фокус установлен на данный верхний уровень, незаметно, если не запрашивать X сервер непосредственно из C программы.