Система подій¶
Система подій у Gaphor надає API для обробки подій і підписки на події.
У Gaphor ми керуємо підписками на обробник подій через службу EventManager. Gaphor дуже орієнтований на події:
Зміни в завантаженій моделі видаються як події
Зміни на діаграмах видаються як події
Зміни в інтерфейсі користувача випромінюються як події
Хоча користувацький інтерфейс Gaphor значною мірою залежить від GTK, Gaphor використовує власний диспетчер подій. Події можна структурувати у вигляді ієрархій. Наприклад, подія AttributeUpdated є підтипом події ElementUpdated. Якщо нас цікавлять всі зміни в елементах, ми також можемо зареєструвати ElementUpdated і отримувати всі події AttributeUpdated.
- class gaphor.core.eventmanager.EventManager[source]¶
Менеджер подій забезпечує гнучкий спосіб відправки подій.
Диспетчеризація подій є центральним компонентом Gaphor. Це дозволяє компонентам Gaphor реагувати на зміни в програмі.
Події розсилаються за типом.
- class subscribe(self, handler: Callable[[object], None])¶
Зареєструйте обробника.
Обробники запускаються (виконуються), коли події надходять через метод
handle.
- gaphor.core.event_handler(*event_types)[source]¶
Позначте функцію/метод як обробник події для певного типу події.
Враховуючи настроюваний тип події:
>>> class CustomEvent: ... def __str__(self): ... return type(self).__name__
Ви можете застосувати це до методу або функції обробника:
>>> @event_handler(CustomEvent) ... def custom_handler(event: CustomEvent): ... print(event)
Це дозволить вам дозволити керування подією менеджеру подій:
>>> event_manager = EventManager() >>> event_manager.subscribe(custom_handler) >>> event_manager.handle(CustomEvent()) CustomEvent
Under the hood events are handled by the Generics library. For more information about how the Generic library handles events see the Generic documentation.