Bind and trigger the custom event¶
This page explains the bind_custom_event and trigger_custom_event interfaces.
What interfaces are these?¶
The bind_custom_event interface registers your custom event to the instance, and the trigger_custom_event one triggers the registered custom events at any time.
Basic usage¶
The bind_custom_event interface has the custom_event_type, handler, e, and options arguments (options argument is optional).
The custom_event_type argument is the custom event type name’s string. This value needs to specify the same one at the calling of the trigger_custom_event interface.
The e argument is an event instance that may become the subclass of the Event class, such as the MouseEvent or TimerEvent.
The following example rotates the rectangle when you click it. If the rectangle rotated 90 degrees, then the custom event (rotate_90_degrees) is triggered, and the on_rotate_90_degrees handler (custom event) is called and display the second rectangle (toggle the visible property):
from typing_extensions import TypedDict
import apysc as ap
# Custom event type name.
ROTATE_90_DEGREES: str = "rotate_90_degrees"
class _RectOptions(TypedDict):
rectangle: ap.Rectangle
def on_rectangle_click(e: ap.MouseEvent[ap.Rectangle], options: dict) -> None:
"""
The handler that the rectangle calls when clicked.
Parameters
----------
e : ap.MouseEvent
Event instance.
options : dict
Optional arguments dictionary.
"""
e.this.unbind_click(on_rectangle_click)
options_: _RectOptions = {"rectangle": e.this}
timer: ap.Timer = ap.Timer(
on_timer, delay=ap.FPS.FPS_60, repeat_count=90, options=options_
)
timer.timer_complete(on_timer_complete, options=options_)
timer.start()
def on_timer(e: ap.TimerEvent, options: _RectOptions) -> None:
"""
The handler that the timer calls.
Parameters
----------
e : ap.TimerEvent
Event instance.
options : dict
Optional arguments dictionary.
"""
rectangle: ap.Rectangle = options["rectangle"]
rectangle.rotation_around_center += 1
def on_timer_complete(e: ap.TimerEvent, options: _RectOptions) -> None:
"""
The handler that timer calls when its end.
Parameters
----------
e : ap.TimerEvent
Event instance.
options : dict
Optional arguments dictionary.
"""
rectangle: ap.Rectangle = options["rectangle"]
rectangle.trigger_custom_event(custom_event_type=ROTATE_90_DEGREES)
def on_rotate_90_degrees(e: ap.Event, options: _RectOptions) -> None:
"""
The handler that the rectangle rates 90 degrees (custom event).
Parameters
----------
e : ap.Event
Event instance.
options : dict
Optional arguments dictionary.
"""
rectangle: ap.Rectangle = options["rectangle"]
rectangle.visible = ap.Boolean(True)
ap.Stage(
stage_width=250,
stage_height=150,
background_color=ap.Color("#333"),
stage_elem_id="stage",
)
sprite: ap.Sprite = ap.Sprite()
sprite.graphics.begin_fill(color=ap.Color("#0af"))
rectangle_1: ap.Rectangle = sprite.graphics.draw_rect(x=50, y=50, width=50, height=50)
rectangle_1.click(on_rectangle_click)
rectangle_2: ap.Rectangle = sprite.graphics.draw_rect(x=150, y=50, width=50, height=50)
rectangle_2.visible = ap.Boolean(False)
e: ap.Event = ap.Event(this=rectangle_1)
rectangle_1.bind_custom_event(
custom_event_type=ROTATE_90_DEGREES,
handler=on_rotate_90_degrees,
e=e,
options={"rectangle": rectangle_2},
)
ap.save_overall_html(dest_dir_path="bind_and_trigger_custom_event_basic_usage/")
Unbind custom event¶
The unbind_custom_event method interface unbinds a single custom event.
Similarly, the unbind_custom_event_all method interface unbinds all custom events.
bind_custom_event API¶
Note: the document build script generates and updates this API document section automatically. Maybe this section is duplicated compared with previous sections.
[Interface signature] bind_custom_event(self, *, custom_event_type: Union[apysc._event.custom_event_type.CustomEventType, str], handler: Callable[[Any, Any], NoneType], e: apysc._event.event.Event, options: Union[Any, NoneType] = None, in_handler_head_expression: str = '') -> str
[Interface summary]
Add a custom event listener setting.
[Parameters]
custom_event_type: CustomEventType or strTarget custom event type.
handler: _HandlerCallable that this instance calls when its event’s dispatching.
e: EventEvent instance.
options: dict or None, default NoneOptional arguments dictionary to be passed to a handler.
in_handler_head_expression: str, default “”Optional expression to be added at the handler function’s head position.
[Returns]
name: strHandler’s name.
[Examples]
>>> import apysc as ap
>>> def on_custom_event(e: ap.Event[ap.Rectangle], options: dict) -> None:
... rectangle: ap.Rectangle = e.this
... rectangle.fill_color = ap.Color("#f0a")
>>> stage: ap.Stage = ap.Stage()
>>> sprite: ap.Sprite = ap.Sprite()
>>> sprite.graphics.begin_fill(color=ap.Color("#0af"))
>>> rectangle: ap.Rectangle = sprite.graphics.draw_rect(
... x=50, y=50, width=50, height=50
... )
>>> e: ap.Event = ap.Event(this=rectangle)
>>> _ = rectangle.bind_custom_event(
... custom_event_type="my_custom_event", handler=on_custom_event, e=e
... )
>>> # Do something here and then trigger the custom event
>>> rectangle.trigger_custom_event(custom_event_type="my_custom_event")
[References]
trigger_custom_event API¶
Note: the document build script generates and updates this API document section automatically. Maybe this section is duplicated compared with previous sections.
[Interface signature] trigger_custom_event(self, *, custom_event_type: Union[apysc._event.custom_event_type.CustomEventType, str]) -> None
[Interface summary]
Add a custom event trigger setting.
[Parameters]
custom_event_type: CustomEventType or strTarget custom event type.
[Examples]
>>> import apysc as ap
>>> def on_custom_event(e: ap.Event[ap.Rectangle], options: dict) -> None:
... rectangle: ap.Rectangle = e.this
... rectangle.fill_color = ap.Color("#f0a")
>>> stage: ap.Stage = ap.Stage()
>>> sprite: ap.Sprite = ap.Sprite()
>>> sprite.graphics.begin_fill(color=ap.Color("#0af"))
>>> rectangle: ap.Rectangle = sprite.graphics.draw_rect(
... x=50, y=50, width=50, height=50
... )
>>> e: ap.Event = ap.Event(this=rectangle)
>>> _ = rectangle.bind_custom_event(
... custom_event_type="my_custom_event", handler=on_custom_event, e=e
... )
>>> # Do something here and then trigger the custom event
>>> rectangle.trigger_custom_event(custom_event_type="my_custom_event")
unbind_custom_event API¶
Note: the document build script generates and updates this API document section automatically. Maybe this section is duplicated compared with previous sections.
[Interface signature] unbind_custom_event(self, *, custom_event_type: Union[apysc._event.custom_event_type.CustomEventType, str], handler: Callable[[Any, Any], NoneType]) -> str
[Interface summary]
Unbind (remove) a custom event listener setting.
[Parameters]
custom_event_type: CustomEventType or strTarget custom event type.
handler: _HandlerA handler for when the custom event is triggered.
[Returns]
name: strHandler’s name.
[Examples]
>>> import apysc as ap
>>> def on_custom_event(e: ap.Event[ap.Rectangle], options: dict) -> None:
... rectangle: ap.Rectangle = e.this
... rectangle.fill_color = ap.Color("#f0a")
... rectangle.unbind_custom_event(
... custom_event_type="my_custom_event", handler=on_custom_event
... )
>>> stage: ap.Stage = ap.Stage()
>>> sprite: ap.Sprite = ap.Sprite()
>>> sprite.graphics.begin_fill(color=ap.Color("#0af"))
>>> rectangle: ap.Rectangle = sprite.graphics.draw_rect(
... x=50, y=50, width=50, height=50
... )
>>> e: ap.Event = ap.Event(this=rectangle)
>>> _ = rectangle.bind_custom_event(
... custom_event_type="my_custom_event", handler=on_custom_event, e=e
... )
>>> # Do something here and then trigger the custom event
>>> rectangle.trigger_custom_event(custom_event_type="my_custom_event")
unbind_custom_event_all API¶
Note: the document build script generates and updates this API document section automatically. Maybe this section is duplicated compared with previous sections.
[Interface signature] unbind_custom_event_all(self, *, custom_event_type: Union[apysc._event.custom_event_type.CustomEventType, str]) -> None
[Interface summary]
Unbind (remove) custom event listener settings.
[Parameters]
custom_event_type: CustomEventType or strTarget custom event type.
[Examples]
>>> import apysc as ap
>>> def on_custom_event(e: ap.Event[ap.Rectangle], options: dict) -> None:
... rectangle: ap.Rectangle = e.this
... rectangle.fill_color = ap.Color("#f0a")
... rectangle.unbind_custom_event_all(custom_event_type="my_custom_event")
>>> stage: ap.Stage = ap.Stage()
>>> sprite: ap.Sprite = ap.Sprite()
>>> sprite.graphics.begin_fill(color=ap.Color("#0af"))
>>> rectangle: ap.Rectangle = sprite.graphics.draw_rect(
... x=50, y=50, width=50, height=50
... )
>>> e: ap.Event = ap.Event(this=rectangle)
>>> _ = rectangle.bind_custom_event(
... custom_event_type="my_custom_event", handler=on_custom_event, e=e
... )
>>> # Do something here and then trigger the custom event
>>> rectangle.trigger_custom_event(custom_event_type="my_custom_event")