focus
-
Имя
- focus — Управление фокусом ввода
- Синтаксис
- Описание
-
focus
- focus окно
- focus -displayof окно
- focus -force окно
- focus -lastfor окно
- focus окно
Имя
focus — Управление фокусом вводаСинтаксис
focusfocus окно
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