busy
-
Имя
- busy — ограничение событий указателя и клавиатуры в поддереве окна
- СИНТАКСИС
- ОПИСАНИЕ
- ВВЕДЕНИЕ
- ПРИМЕР
- ОПЕРАЦИИ
-
tk busy окно ?параметр значение?...
- tk busy hold окно ?параметр значение?...
- -cursor имя_курсора
- tk busy cget окно параметр
- tk busy configure окно ?параметр значение?...
- tk busy forget окно ?окно?...
- tk busy current ?шаблон?
- tk busy status окно
- tk busy hold окно ?параметр значение?...
- ОБРАБОТКА СОБЫТИЙ
- ПРИВЯЗКИ
- СОБЫТИЯ ВВОДА/ВЫВОДА
- СОБЫТИЯ КЛАВИАТУРЫ
- ПЕРЕНОСИМОСТЬ
- СМОТРИТЕ ТАКЖЕ
- КЛЮЧЕВЫЕ СЛОВА
Имя
busy — ограничение событий указателя и клавиатуры в поддереве окнаСинтаксис
tk busy окно ?параметры?tk busy hold окно ?параметры?
tk busy configure окно ?параметр значение?...
tk busy forget окно ?окно ?...
tk busy current ?шаблон?
tk busy status окно
Описание
Команда tk busy предоставляет простой способ блокировать события клавиатуры, кнопок и указателя для виджетов Tk, одновременно перезаписывая курсор виджета на настраиваемый курсор ожидания.Введение
В приложениях часто возникают ситуации, когда необходимо временно ограничить действия пользователя. Например, кнопка «Запуск» в приложении может вызывать обработку. Однако, пока приложение выполняет обработку, пользователь, вероятно, не должен иметь возможность снова нажать кнопку «Запуск». Также возможно ограничить доступ к другим задачам, таким как нажатие кнопки «Печать».Команда tk busy позволяет сделать виджеты Tk занятыми. Это означает, что пользовательские взаимодействия, такие как щелчки кнопок, перемещение мыши, ввод с клавиатуры и т. д., игнорируются виджетом. Вы можете установить специальный курсор (например, часы), который перезаписывает обычный курсор виджета, сигнализируя, что приложение (виджет) временно занято.
Когда виджет становится занятым, он и все его потомки игнорируют события. Легко сделать занятым весь набор виджетов. Достаточно сделать занятым виджет верхнего уровня (например, «.»). Это проще и гораздо эффективнее, чем рекурсивное обход иерархии виджетов, отключение каждого виджета и перенастройка его курсора.
Команда tk busy часто может использоваться вместо команды Tk grab. В отличие от grab, которая ограничивает все пользовательские взаимодействия одним виджетом, с помощью команды tk busy вы можете иметь более одного активного виджета (например, диалоговое окно «Отмена» и кнопку «Справка»).
Пример
Вы можете сделать несколько виджетов занятыми, просто сделав их родительский виджет занятым с помощью операции hold.frame .top button .top.button; canvas .top.canvas pack .top.button .top.canvas pack .top # . . . tk busy hold .top update
Все виджеты в пределах .top (включая .top) теперь заняты. Использование update гарантирует, что команда tk busy вступит в силу до того, как произойдут какие-либо другие пользовательские события.
Когда приложение больше не занято обработкой, вы можете снова разрешить пользовательские взаимодействия и освободить все ресурсы, выделенные командой tk busy, с помощью операции forget.
tk busy forget .top
Занятое окно имеет настраиваемый курсор. Вы можете изменить курсор ожидания с помощью операции configure.
tk busy configure .top -cursor "watch"
Уничтожение виджета также очистит все ресурсы, выделенные командой tk busy.
Операции
Следующие операции доступны для команды tk busy:- tk busy окно ?параметр значение?...
- Является сокращением для команды tk busy hold.
- tk busy hold окно ?параметр значение?...
- Делает указанное окно (и его потомков в иерархии окон Tk) занятым. Окно должно быть допустимым именем пути виджета Tk. Перед указанным окном отображается прозрачное окно. Это прозрачное окно отображается в следующий раз, когда обрабатываются задачи в режиме ожидания, и указанное окно и его потомки будут заблокированы от пользовательских взаимодействий. Обычно необходимо вызвать update сразу после этого, чтобы гарантировать, что операция hold будет выполнена до начала обработки приложения. Следующие параметры конфигурации действительны:
- -cursor имя_курсора
- Указывает курсор, который будет отображаться, когда виджет становится занятым. имя_курсора может быть в любом формате, принятом Tk_GetCursor. По умолчанию курсор wait в Windows и watch на других платформах.
- tk busy cget окно параметр
- Запрашивает параметры конфигурации команды tk busy для окна. Окно должно быть именем пути виджета, ранее помеченного занятым с помощью операции hold. Команда возвращает текущее значение указанного параметра. Параметр может принимать любые значения, допустимые для операции hold.
- tk busy configure окно ?параметр значение?...
- Запрашивает или изменяет параметры конфигурации команды tk busy для окна. Окно должно быть именем пути виджета, ранее помеченного занятым с помощью операции hold. Если параметры не указаны, возвращается список, описывающий все доступные параметры для окна (см. Tk_ConfigureInfo для получения информации о формате этого списка). Если параметр указан без значения, то команда возвращает список, описывающий указанный параметр (этот список будет идентичен соответствующему подсписку значения, возвращаемого, если параметр не указан). Если указаны одна или несколько пар параметр-значение, то команда изменяет заданный(ые) параметр(ы) виджета на заданное(ые) значение(я); в этом случае команда возвращает пустую строку. Параметр может принимать любые значения, допустимые для операции hold.
Обратите внимание, что база данных параметров ссылается через окно. Например, если виджет .frame должен быть помечен как занятый, курсор ожидания можно указать для него с помощью команды option:
option add *frame.busyCursor gumby option add *Frame.BusyCursor gumby
- tk busy forget окно ?окно?...
- Освобождает ресурсы, выделенные командой tk busy для окна, включая прозрачное окно. События пользователя снова будут приниматься окном. Ресурсы также освобождаются при уничтожении окна. Окно должно быть именем виджета, указанного в операции hold, в противном случае будет сообщено об ошибке.
- tk busy current ?шаблон?
- Возвращает имена путей всех виджетов, которые в данный момент заняты. Если указан шаблон, возвращаются только имена путей занятых виджетов, соответствующих шаблону.
- tk busy status окно
- Возвращает состояние виджета окно. Если окно в настоящее время не может принимать пользовательские взаимодействия, возвращается 1, в противном случае 0.
Обработка событий
Привязки
Функция блокирования событий реализована путем создания и отображения прозрачного окна, которое полностью покрывает виджет. Когда окно ожидания отображается, оно невидимо защищает виджет и его иерархию от всех событий, которые могут быть отправлены. Как и виджеты Tk, окна ожидания имеют имена виджетов в иерархии окон Tk. Это означает, что вы можете использовать команду bind для обработки событий в окне ожидания.tk busy hold .frame.canvas
bind .frame.canvas_Busy <Enter> { ... } Обычно окно ожидания является элементом, смежным с виджетом. Имя окна ожидания — «виджет_Ожидание», где виджет — имя виджета, который необходимо сделать занятым. В предыдущем примере путь к окну ожидания — «.frame.canvas_Ожидание». Исключением является случай, когда виджет является виджетом верхнего уровня (например, «.»), где окно ожидания не может быть расположено как смежное. Тогда окно ожидания является потомком виджета с именем «виджет._Ожидание», где виджет — имя виджета верхнего уровня. В следующем примере путь к окну ожидания — «._Ожидание».
tk busy hold .
bind ._Busy <Enter> { ... } События ввода/вывода
Отображение и скрытие окон ожидания генерируют события ввода/вывода для всех виджетов, которые они покрывают. Пожалуйста, учтите это, если вы отслеживаете события ввода/вывода в виджетах.События клавиатуры
Когда виджет становится занятым, ему препятствует получение фокуса клавиатуры окном ожидания. Но если у виджета уже был фокус, он всё равно может получать события клавиатуры. Для предотвращения этого, необходимо переместить фокус на другое окно.tk busy hold .frame label .dummy focus .dummy update
В приведенном выше примере фокус перемещается из .frame сразу после вызова hold, чтобы никакие события клавиатуры не отправлялись в .frame или его потомков.
Переносимость
Обратите внимание, что команда tk busy в настоящее время не оказывает никакого влияния на OSX, когда Tk построен с поддержкой Aqua.См. также
grab
Licensed under Tcl/Tk terms
https://www.tcl.tk/man/tcl/TkCmd/busy.htm
Licensed under Tcl/Tk terms
https://www.tcl.tk/man/tcl/TkCmd/busy.htm