События

Обработка событий в 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

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