Spec-Zone.ru › Tcl/Tk

focus

Имя
focus — Управление фокусом ввода
Синтаксис
Описание
focus
focus окно
focus -displayof окно
focus -force окно
focus -lastfor окно
Особенности
Пример
Ключевые слова

Имя

focus — Управление фокусом ввода

Синтаксис

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 окно
Если приложение в данный момент имеет фокус ввода на дисплее окно, эта команда сбрасывает фокус ввода для дисплея окно на окно и возвращает пустую строку. Если приложение в данный момент не имеет фокуса ввода на дисплее окно, окно будет запомнено как фокус для его окна верхнего уровня; в следующий раз, когда фокус попадёт на окно верхнего уровня, Tk перенаправит его на окно. Если окно является пустой строкой, то команда ничего не делает.
focus -displayof окно
Возвращает имя окна фокуса на дисплее, содержащем окно. Если окно фокуса для дисплея окно не находится в этом приложении, возвращается пустая строка.
focus -force окно
Устанавливает фокус дисплея окно на окно, даже если приложение в данный момент не имеет фокуса ввода для дисплея. Эту команду следует использовать с осторожностью, если вообще использовать. В обычном использовании приложение не должно захватывать фокус для себя; вместо этого оно должно ожидать, пока менеджер окон предоставит ему фокус. Если окно является пустой строкой, то команда ничего не делает.
focus -lastfor окно
Возвращает имя последнего окна, имевшего фокус ввода среди всех окон в том же окне верхнего уровня, что и окно. Если ни одно окно в этом окне верхнего уровня никогда не имело фокуса ввода или если последнее окно фокуса было удалено, возвращается имя окна верхнего уровня. Возвращаемое значение — это окно, которое получит фокус ввода в следующий раз, когда менеджер окон предоставит фокус окну верхнего уровня.

Особенности

Когда внутреннее окно получает фокус ввода, Tk фактически не устанавливает фокус X в это окно; с точки зрения X фокус останется на окне верхнего уровня, содержащем окно с фокусом. Однако Tk генерирует события FocusIn и FocusOut так, как если бы фокус X был установлен на внутреннем окне. Этот подход обходит ряд проблем, которые возникли бы, если бы фокус X был фактически перемещён; тот факт, что фокус X находится на окне верхнего уровня, не виден, если вы не используете код C для прямого запроса к серверу X.

Пример

Чтобы сделать окно, которое участвует в цикле перемещения фокуса только при установлении переменной, добавьте следующие привязки к виджетам *до* и *после* него в этом цикле перемещения фокуса:
button .before -text "Before"
button .middle -text "Middle"
button .after  -text "After"
checkbutton .flag -variable traverseToMiddle -takefocus 0
pack .flag -side left
pack .before .middle .after
bind .before <Tab> {
   if {!$traverseToMiddle} {
      focus .after
      break
   }
}
bind .after <Shift-Tab> {
   if {!$traverseToMiddle} {
      focus .before
      break
   }
}
focus .before

Licensed under Tcl/Tk terms
https://www.tcl.tk/man/tcl/TkCmd/focus.htm

Licensed under Tcl/Tk terms
https://www.tcl.tk/man/tcl/TkCmd/focus.htm

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API