События¶
Обработка событий в OutWiker реализована через класс outwiker.core.event.Event
. Каждый экземпляр класса outwiker.core.event.Event
отвечает за какое-то одно событие. Этот класс соответствует шаблону проектирования «издатель - подписчик» (publisher-subscriber). Пользователи класса подписываются на событие, указывая какую функцию или вызываемый объект нужно вызвать при срабатывании события, а когда событие срабатывает, вызывается указанная функция или вызываемый объект с теми параметрами, которые были переданы в событие кодом, который вызвал срабатывание события.
На одно событие может быть подписано множество подписчиков, при этом все они имеют приоритет, определяемый целым числом, чем оно больше, тем выше приоритет, и тем раньше будет вызван обработчик с данным приоритетом. Если приоритет не указан, то по умолчанию он равен значению EVENT_PRIORITY_DEFAULT=0 из модуля outwiker.core.event. Величина приоритета на должно превышать значения EVENT_PRIORITY_MAX_CORE=100 и не должно быть меньше EVENT_PRIORITY_MIN_CORE=-100. Рекомендуется всегда оставлять приоритет по умолчанию и писать код так, чтобы не рассчитывать на порядок вызова обработчиков событий.
Многие события содержит в себе класс outwiker.core.application.ApplicationParams
(см. раздел Application. Экземпляр класса ApplicationParams). Содержимое класса outwiker.core.event.Event
:
-
class
outwiker.core.event.
Event
¶ -
__init__
()¶ Конструктор. Не принимает параметров.
-
bind
(handler, priority=EVENT_PRIORITY_DEFAULT)¶ Подписаться на событие.
Параметры: - handler (function) – функция или вызываемый объект, который должен принимать те же параметры, что будут использованы при вызове события (см. документацию к каждому конкретному событию).
- priority (int) – приоритет данного подписчика. Чем выше приоритет, тем раньше будет вызван подписчик. Порядок вызова подписчиков с одинаковыми приоритетами не определен.
Результат: None
-
__iadd__
(handler)¶ Более короткий аналог метода
bind()
. Не позволяет указывать приоритет.Параметры: handler (function) – функция или вызываемый объект, который должен принимать те же параметры, что будут использованы при вызове события (см. документацию к каждому конкретному событию). Результат: None
-
unbind
(handler)¶ Отписаться от события.
Параметры: handler (function) – функция или вызываемый объект, который был указан при подписке на событие с помощью метода bind()
или__iadd__()
.Результат: None
-
__isub__
(handler)¶ Аналог метода
unbind()
Параметры: handler (function) – функция или вызываемый объект, который был указан при подписке на событие с помощью метода bind()
или__iadd__()
.Результат: None
-
__call__
(*args, **kwargs)¶ Вызов события с параметрами *args и **kwargs. Метод вызывает все обработчики, которые были добавлены с помощью методов
bind()
или__iadd__()
.
-
clear
()¶ Отписывает всех подписчиков данного события.
-
Примеры использования класса outwiker.core.event.Event
¶
Пример 1¶
from outwiker.core.event import Event
def handler(param1, param2):
...
event = Event()
event += handler
event(10, 100)
...
event -= handler
Пример 2¶
from outwiker.core.event import Event
def handler(param1, param2):
...
event = Event()
event.bind(handler)
event(10, 100)
...
event.unbind(handler)
Пример 3. Использование приоритетов¶
from outwiker.core.event import Event, EVENT_PRIORITY_DEFAULT
def handler1(param1, param2):
...
def handler2(param1, param2):
...
event = Event()
event.bind(handler1, priority=EVENT_PRIORITY_DEFAULT + 1)
event.bind(handler2, priority=EVENT_PRIORITY_DEFAULT - 1)
event(10, 100)
...
event.unbind(handler1)
event.unbind(handler2)
Пример 4. Использование событий из outwiker.core.application.ApplicationParams
¶
from outwiker.core.application import Application
def pageSelect(sender):
...
Application.onPageSelect += pageSelect
...
Application.onPageSelect -= pageSelect
Пользовательские события¶
Помимо класса outwiker.core.event.Event
внутри модуля outwiker.core.event
содержится класс outwiker.core.event.CustomEvents
, предназначенный для хранения списка событий (экземпляров класса outwiker.core.event.Event
), доступ к которым осуществляется по имени (по ключу). Этот класс может быть полезен в тех случаях, когда нужно подписаться на событие, которое создается динамически (например, с помощью плагина). Класс outwiker.core.event.CustomEvents
создает экземпляр класса outwiker.core.event.Event
внутри себя только тогда, когда кто-то подписывается на событие с новым ключом.
-
class
outwiker.core.event.
CustomEvents
¶ -
bind
(key, handler, priority=EVENT_PRIORITY_DEFAULT)¶ Подписаться на событие с ключом key.
Параметры: - key (str) – ключ, с помощью которого идентифицируется событие. Рекомендуется использовать строку. Если не существует события с ключом key, будет создано новое событие (экземпляр класса
outwiker.core.event.Event
) с данным ключом. - handler (function) – функция или вызываемый объект, который должен принимать те же параметры, что будут использованы при вызове события (см. документацию к каждому конкретному событию).
- priority (int) – приоритет данного подписчика. Чем выше приоритет, тем раньше будет вызван подписчик. Порядок вызова подписчиков с одинаковыми приоритетами не определен.
Результат: None
- key (str) – ключ, с помощью которого идентифицируется событие. Рекомендуется использовать строку. Если не существует события с ключом key, будет создано новое событие (экземпляр класса
-
unbind
(key, handler)¶ Отписаться от события с ключом key.
Параметры: - key (str) – ключ, с помощью которого идентифицируется событие. Если не существует события с ключом key, то ничего не происходит.
- handler (function) – функция или вызываемый объект, который был указан при подписке на событие с помощью метода
bind()
или__iadd__()
.
Результат: None
-
__call__
(key *args, **kwargs)¶ Вызов события, которое определяется ключом key, с параметрами *args и **kwargs. Метод вызывает все обработчики, которые были добавлены с помощью метода
bind()
. Если не существует события с ключом key, то ничего не происходит.
-
clear
(key)¶ Отписывает всех подписчиков события, которое определяется ключом key. Если не существует события с ключом key, то ничего не происходит.
-
get
(key)¶ Возвращает экземпляр класса
outwiker.core.event.Event
, который определяется ключом key.Параметры: key (str) – ключ, с помощью которого идентифицируется событие. Если не существует события с ключом key, то оно создается. Тип результата: outwiker.core.event.Event
-