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