Skip to main content

GestureDetector

A control that detects gestures.

Attempts to recognize gestures that correspond to its non-None callbacks.

If this control has a content, it defers to that child control for its sizing behavior, else it grows to fit the parent instead.

Inherits: LayoutControl, AdaptiveControl

Properties

Events

  • on_double_tap - The user has tapped the screen with a primary button at the same location twice in quick succession.
  • on_double_tap_cancel - The pointer sequence that was expected to cause a double tap will not do so.
  • on_double_tap_down - Called when a pointer that might cause a double tap has contacted the screen at a particular location.
  • on_enter - Called when a mouse pointer has entered this control.
  • on_exit - Called when a mouse pointer has exited this control.
  • on_force_press_end - Called when the pointer that triggered a force press is no longer in contact with the screen.
  • on_force_press_peak - Called when a pointer has pressed with a force exceeding the peak pressure.
  • on_force_press_start - Called when a pointer has pressed with a force exceeding the start pressure.
  • on_force_press_update - Called for each update after a force press has started.
  • on_horizontal_drag_cancel - The pointer that previously triggered on_horizontal_drag_down will not end up causing a horizontal drag.
  • on_horizontal_drag_down - Called when a pointer has contacted the screen and might begin to move horizontally.
  • on_horizontal_drag_end - Called when a pointer moving horizontally is no longer in contact and was moving at a specific velocity.
  • on_horizontal_drag_start - Called when a pointer has contacted the screen with a primary button and has begun to move horizontally.
  • on_horizontal_drag_update - Called when a pointer that is in contact with the screen and moving horizontally has moved in the horizontal direction.
  • on_hover - Called when a mouse pointer has entered this control.
  • on_long_press - Called when a long press gesture with a primary button has been recognized.
  • on_long_press_cancel - The pointer that previously triggered on_long_press_down will not end up causing a long-press.
  • on_long_press_down - Called when a pointer that might cause a long press with a primary button has contacted the screen.
  • on_long_press_end - Called when a pointer that has triggered a long-press with a primary button has stopped contacting the screen.
  • on_long_press_move_update - Called when, after a long press has been accepted, the pointer moves.
  • on_long_press_start - Triggered when a pointer has remained in contact with the screen at the same location for a long period of time.
  • on_long_press_up - Called when a pointer that has triggered a long press with a primary button is no longer in contact with the screen.
  • on_multi_long_press - Called when a long press gesture with multiple pointers has been recognized.
  • on_multi_tap - Called when multiple pointers contacted the screen.
  • on_pan_cancel - The pointer that previously triggered on_pan_down will not end up causing a pan gesture.
  • on_pan_down - Called when a pointer has contacted the screen and might begin to move.
  • on_pan_end - Called when a pointer is no longer in contact and was moving at a specific velocity.
  • on_pan_start - Called when a pointer has contacted the screen and has begun to move.
  • on_pan_update - Called when a pointer that is in contact with the screen and moving has moved again.
  • on_right_pan_end - A pointer with secondary button pressed is no longer in contact and was moving at a specific velocity.
  • on_right_pan_start - Pointer has contacted the screen while secondary button pressed and has begun to move.
  • on_right_pan_update - A pointer that is in contact with the screen, secondary button pressed and moving has moved again.
  • on_scale_end - TBD
  • on_scale_start - Called when the pointers in contact with the screen have established a focal point and initial scale of 1.0.
  • on_scale_update - TBD
  • on_scroll - TBD
  • on_secondary_long_press - Called when a long press gesture with a secondary button has been recognized.
  • on_secondary_long_press_cancel - The pointer that previously triggered on_secondary_long_press_down not end up causing a long-press.
  • on_secondary_long_press_down - Called when a pointer that might cause a long press with a secondary button has contacted the screen.
  • on_secondary_long_press_end - Called when a pointer that has triggered a long-press with a secondary button has stopped contacting the screen.
  • on_secondary_long_press_move_update - Called when, after a secondary long press has been accepted, the pointer moves.
  • on_secondary_long_press_start - Triggered when a pointer has remained in contact with the screen at the same location for a long period of time.
  • on_secondary_long_press_up - Called when a pointer that has triggered a long press with a secondary button is no longer in contact with the screen.
  • on_secondary_tap - A tap with a secondary button has occurred.
  • on_secondary_tap_cancel - The pointer that previously triggered on_secondary_tap_down will not end up causing a tap.
  • on_secondary_tap_down - Called when a pointer that might cause a tap with a secondary button has contacted the screen at a particular location.
  • on_secondary_tap_up - Called when a pointer that will trigger a tap with a secondary button has stopped contacting the screen at a particular location.
  • on_tap - Called when a tap with a primary button has occurred.
  • on_tap_cancel - The pointer that previously triggered on_tap_down will not end up causing a tap.
  • on_tap_down - Called when a pointer that might cause a tap with a primary button has contacted the screen at a particular location.
  • on_tap_move - Called when a pointer that triggered a tap has moved.
  • on_tap_up - Called when a pointer that will trigger a tap with a primary button has stopped contacting the screen at a particular location.
  • on_tertiary_long_press - Called when a long press gesture with a tertiary button has been recognized.
  • on_tertiary_long_press_cancel - The pointer that previously triggered on_tertiary_long_press_down will not end up causing a long-press.
  • on_tertiary_long_press_down - Called when a pointer that might cause a long press with a tertiary button has contacted the screen.
  • on_tertiary_long_press_end - Called when a pointer that has triggered a long-press with a tertiary button has stopped contacting the screen.
  • on_tertiary_long_press_move_update - Called when, after a tertiary long press has been accepted, the pointer moves.
  • on_tertiary_long_press_start - Triggered when a pointer has remained in contact with the screen at the same location for a long period of time.
  • on_tertiary_long_press_up - Called when a pointer that has triggered a long press with a tertiary button is no longer in contact with the screen.
  • on_tertiary_tap_cancel - The pointer that previously triggered on_tertiary_tap_down will not end up causing a tap.
  • on_tertiary_tap_down - Called when a pointer that might cause a tap with a tertiary button has contacted the screen at a particular location.
  • on_tertiary_tap_up - Called when a pointer that will trigger a tap with a tertiary button has stopped contacting the screen at a particular location.
  • on_vertical_drag_cancel - The pointer that previously triggered on_vertical_drag_down will not end up causing a vertical drag.
  • on_vertical_drag_down - Called when a pointer has contacted the screen and might begin to move vertically.
  • on_vertical_drag_end - Called when a pointer moving vertically is no longer in contact and was moving at a specific velocity.
  • on_vertical_drag_start - Called when a pointer has contacted the screen and has begun to move vertically.
  • on_vertical_drag_update - A pointer moving vertically has moved in the vertical direction.

Examples

Live example

Solitaire game tutorial

Handling events

import flet as ft


def main(page: ft.Page):
page.add(
ft.SafeArea(
content=ft.GestureDetector(
hover_interval=50,
on_tap=lambda e: print(e),
on_tap_down=lambda e: print(e),
on_tap_up=lambda e: print(e),
on_secondary_tap=lambda e: print(e),
on_secondary_tap_down=lambda e: print(e),
on_secondary_tap_up=lambda e: print(e),
on_long_press_start=lambda e: print(e),
on_long_press_end=lambda e: print(e),
on_secondary_long_press_start=lambda e: print(e),
on_secondary_long_press_end=lambda e: print(e),
on_double_tap=lambda e: print(e),
on_double_tap_down=lambda e: print(e),
on_pan_start=lambda e: print(e),
on_pan_update=lambda e: print(e),
on_pan_end=lambda e: print(e),
on_hover=lambda e: print(e),
on_enter=lambda e: print(e),
on_exit=lambda e: print(e),
content=ft.Container(
bgcolor=ft.Colors.GREEN,
width=200,
height=200,
),
),
)
)


if __name__ == "__main__":
ft.run(main)

Draggable containers

The following example demonstrates how a control can be freely dragged inside a Stack.

The sample also shows that GestureDetector can have a child control (blue container) as well as be nested inside another control (yellow container) giving the same results.

import flet as ft


def main(page: ft.Page):
def handle_pan_update1(e: ft.DragUpdateEvent[ft.GestureDetector]):
container = e.control.parent
container.top = max(0.0, container.top + e.local_delta.y)
container.left = max(0.0, container.left + e.local_delta.x)
container.update()

def handle_pan_update2(e: ft.DragUpdateEvent[ft.GestureDetector]):
e.control.top = max(0.0, e.control.top + e.local_delta.y)
e.control.left = max(0.0, e.control.left + e.local_delta.x)
e.control.update()

page.add(
ft.SafeArea(
content=ft.Stack(
width=1000,
height=500,
controls=[
ft.Container(
bgcolor=ft.Colors.AMBER,
width=50,
height=50,
left=0,
top=0,
content=ft.GestureDetector(
mouse_cursor=ft.MouseCursor.MOVE,
drag_interval=10,
on_pan_update=handle_pan_update1,
),
),
ft.GestureDetector(
mouse_cursor=ft.MouseCursor.MOVE,
drag_interval=10,
on_vertical_drag_update=handle_pan_update2,
left=100,
top=100,
content=ft.Container(
bgcolor=ft.Colors.BLUE,
width=50,
height=50,
),
),
],
),
)
)


if __name__ == "__main__":
ft.run(main)
draggable-containers

Window drag area

import flet as ft


def main(page: ft.Page):
def on_pan_update(e: ft.DragUpdateEvent[ft.GestureDetector]):
page.window.left += e.global_delta.x
page.window.top += e.global_delta.y

page.add(
ft.SafeArea(
content=ft.Stack(
width=1000,
height=500,
controls=[
ft.GestureDetector(
mouse_cursor=ft.MouseCursor.MOVE,
on_pan_update=on_pan_update,
left=200,
top=200,
content=ft.Container(
bgcolor=ft.Colors.PINK,
width=50,
height=50,
),
),
],
),
)
)


if __name__ == "__main__":
ft.run(main)

Mouse Cursors

import random

import flet as ft


def main(page: ft.Page):
def on_pan_update(event: ft.DragUpdateEvent[ft.GestureDetector]):
container.top = max(0.0, container.top + event.local_delta.y)
container.left = max(0.0, container.left + event.local_delta.x)
container.update()

gesture_detector = ft.GestureDetector(
mouse_cursor=ft.MouseCursor.BASIC,
drag_interval=50,
on_pan_update=on_pan_update,
)
container = ft.Container(
bgcolor=ft.Colors.AMBER,
width=150,
height=150,
left=0,
top=0,
content=gesture_detector,
)

def handle_button_click(e: ft.Event[ft.Button]):
gesture_detector.mouse_cursor = random.choice(list(ft.MouseCursor))
text.value = f"Mouse Cursor: {gesture_detector.mouse_cursor}"
gesture_detector.update()
text.update()

page.add(
ft.SafeArea(
content=ft.Column(
controls=[
ft.Stack(
width=1000,
height=500,
controls=[container],
),
ft.Button("Change mouse Cursor", on_click=handle_button_click),
text := ft.Text(f"Mouse Cursor: {gesture_detector.mouse_cursor}"),
],
),
)
)


if __name__ == "__main__":
ft.run(main)

Properties

allowed_devicesclass-attributeinstance-attribute

allowed_devices: Optional[list[PointerDeviceType]] = None

TBD

contentclass-attributeinstance-attribute

content: Optional[Control] = None

A child Control contained by the gesture detector.

drag_intervalclass-attributeinstance-attribute

drag_interval: int = 0

Throttling in milliseconds for horizontal drag, vertical drag and pan update events.

When a user moves a pointer a lot of events are being generated to do precise tracking. drag_interval allows sending drag update events to a Flet program every X milliseconds, thus preserving the bandwidth (web and mobile apps).

0 means no throttling: all events are sent to a Flet program, resulting in very smooth tracking.

exclude_from_semanticsclass-attributeinstance-attribute

exclude_from_semantics: bool = False

TBD

hover_intervalclass-attributeinstance-attribute

hover_interval: int = 0

Throttling in milliseconds for on_hover event.

mouse_cursorclass-attributeinstance-attribute

mouse_cursor: Optional[MouseCursor] = None

The mouse cursor for mouse pointers that are hovering over the control.

multi_tap_touchesclass-attributeinstance-attribute

multi_tap_touches: int = 0

The minimum number of pointers to trigger on_multi_tap event.

trackpad_scroll_causes_scaleclass-attributeinstance-attribute

trackpad_scroll_causes_scale: bool = False

TBD

Events

on_double_tapclass-attributeinstance-attribute

on_double_tap: Optional[ControlEventHandler[GestureDetector]] = None

The user has tapped the screen with a primary button at the same location twice in quick succession.

on_double_tap_cancelclass-attributeinstance-attribute

on_double_tap_cancel: Optional[ControlEventHandler[GestureDetector]] = None

The pointer sequence that was expected to cause a double tap will not do so.

on_double_tap_downclass-attributeinstance-attribute

on_double_tap_down: Optional[EventHandler[TapEvent[GestureDetector]]] = None

Called when a pointer that might cause a double tap has contacted the screen at a particular location.

Triggered immediately after the down event of the second tap.

on_enterclass-attributeinstance-attribute

on_enter: Optional[EventHandler[HoverEvent[GestureDetector]]] = None

Called when a mouse pointer has entered this control.

on_exitclass-attributeinstance-attribute

on_exit: Optional[EventHandler[HoverEvent[GestureDetector]]] = None

Called when a mouse pointer has exited this control.

on_force_press_endclass-attributeinstance-attribute

on_force_press_end: Optional[EventHandler[ForcePressEvent[GestureDetector]]] = None

Called when the pointer that triggered a force press is no longer in contact with the screen.

on_force_press_peakclass-attributeinstance-attribute

on_force_press_peak: Optional[EventHandler[ForcePressEvent[GestureDetector]]] = None

Called when a pointer has pressed with a force exceeding the peak pressure.

on_force_press_startclass-attributeinstance-attribute

on_force_press_start: Optional[EventHandler[ForcePressEvent[GestureDetector]]] = None

Called when a pointer has pressed with a force exceeding the start pressure.

on_force_press_updateclass-attributeinstance-attribute

on_force_press_update: Optional[EventHandler[ForcePressEvent[GestureDetector]]] = None

Called for each update after a force press has started.

on_horizontal_drag_cancelclass-attributeinstance-attribute

on_horizontal_drag_cancel: Optional[ControlEventHandler[GestureDetector]] = None

The pointer that previously triggered on_horizontal_drag_down will not end up causing a horizontal drag.

on_horizontal_drag_downclass-attributeinstance-attribute

on_horizontal_drag_down: Optional[EventHandler[DragDownEvent[GestureDetector]]] = None

Called when a pointer has contacted the screen and might begin to move horizontally.

on_horizontal_drag_endclass-attributeinstance-attribute

on_horizontal_drag_end: Optional[EventHandler[DragEndEvent[GestureDetector]]] = None

Called when a pointer moving horizontally is no longer in contact and was moving at a specific velocity.

on_horizontal_drag_startclass-attributeinstance-attribute

on_horizontal_drag_start: Optional[EventHandler[DragStartEvent[GestureDetector]]] = None

Called when a pointer has contacted the screen with a primary button and has begun to move horizontally.

on_horizontal_drag_updateclass-attributeinstance-attribute

on_horizontal_drag_update: Optional[EventHandler[DragUpdateEvent[GestureDetector]]] = None

Called when a pointer that is in contact with the screen and moving horizontally has moved in the horizontal direction.

on_hoverclass-attributeinstance-attribute

on_hover: Optional[EventHandler[HoverEvent[GestureDetector]]] = None

Called when a mouse pointer has entered this control.

on_long_pressclass-attributeinstance-attribute

on_long_press: Optional[ControlEventHandler[GestureDetector]] = None

Called when a long press gesture with a primary button has been recognized.

on_long_press_cancelclass-attributeinstance-attribute

on_long_press_cancel: Optional[ControlEventHandler[GestureDetector]] = None

The pointer that previously triggered on_long_press_down will not end up causing a long-press.

on_long_press_downclass-attributeinstance-attribute

on_long_press_down: Optional[EventHandler[LongPressDownEvent[GestureDetector]]] = None

Called when a pointer that might cause a long press with a primary button has contacted the screen.

on_long_press_endclass-attributeinstance-attribute

on_long_press_end: Optional[EventHandler[LongPressEndEvent[GestureDetector]]] = None

Called when a pointer that has triggered a long-press with a primary button has stopped contacting the screen.

on_long_press_move_updateclass-attributeinstance-attribute

on_long_press_move_update: Optional[EventHandler[LongPressMoveUpdateEvent[GestureDetector]]] = None

Called when, after a long press has been accepted, the pointer moves.

on_long_press_startclass-attributeinstance-attribute

on_long_press_start: Optional[EventHandler[LongPressStartEvent[GestureDetector]]] = None

Triggered when a pointer has remained in contact with the screen at the same location for a long period of time.

on_long_press_upclass-attributeinstance-attribute

on_long_press_up: Optional[ControlEventHandler[GestureDetector]] = None

Called when a pointer that has triggered a long press with a primary button is no longer in contact with the screen.

on_multi_long_pressclass-attributeinstance-attribute

on_multi_long_press: Optional[EventHandler[LongPressEndEvent[GestureDetector]]] = None

Called when a long press gesture with multiple pointers has been recognized.

on_multi_tapclass-attributeinstance-attribute

on_multi_tap: Optional[EventHandler[TapEvent[GestureDetector]]] = None

Called when multiple pointers contacted the screen.

on_pan_cancelclass-attributeinstance-attribute

on_pan_cancel: Optional[ControlEventHandler[GestureDetector]] = None

The pointer that previously triggered on_pan_down will not end up causing a pan gesture.

on_pan_downclass-attributeinstance-attribute

on_pan_down: Optional[EventHandler[DragDownEvent[GestureDetector]]] = None

Called when a pointer has contacted the screen and might begin to move.

on_pan_endclass-attributeinstance-attribute

on_pan_end: Optional[EventHandler[DragEndEvent[GestureDetector]]] = None

Called when a pointer is no longer in contact and was moving at a specific velocity.

on_pan_startclass-attributeinstance-attribute

on_pan_start: Optional[EventHandler[DragStartEvent[GestureDetector]]] = None

Called when a pointer has contacted the screen and has begun to move.

on_pan_updateclass-attributeinstance-attribute

on_pan_update: Optional[EventHandler[DragUpdateEvent[GestureDetector]]] = None

Called when a pointer that is in contact with the screen and moving has moved again.

on_right_pan_endclass-attributeinstance-attribute

on_right_pan_end: Optional[EventHandler[PointerEvent[GestureDetector]]] = None

A pointer with secondary button pressed is no longer in contact and was moving at a specific velocity.

on_right_pan_startclass-attributeinstance-attribute

on_right_pan_start: Optional[EventHandler[PointerEvent[GestureDetector]]] = None

Pointer has contacted the screen while secondary button pressed and has begun to move.

on_right_pan_updateclass-attributeinstance-attribute

on_right_pan_update: Optional[EventHandler[PointerEvent[GestureDetector]]] = None

A pointer that is in contact with the screen, secondary button pressed and moving has moved again.

on_scale_endclass-attributeinstance-attribute

on_scale_end: Optional[EventHandler[ScaleEndEvent[GestureDetector]]] = None

TBD

on_scale_startclass-attributeinstance-attribute

on_scale_start: Optional[EventHandler[ScaleStartEvent[GestureDetector]]] = None

Called when the pointers in contact with the screen have established a focal point and initial scale of 1.0.

on_scale_updateclass-attributeinstance-attribute

on_scale_update: Optional[EventHandler[ScaleUpdateEvent[GestureDetector]]] = None

TBD

on_scrollclass-attributeinstance-attribute

on_scroll: Optional[EventHandler[ScrollEvent[GestureDetector]]] = None

TBD

on_secondary_long_pressclass-attributeinstance-attribute

on_secondary_long_press: Optional[ControlEventHandler[GestureDetector]] = None

Called when a long press gesture with a secondary button has been recognized.

on_secondary_long_press_cancelclass-attributeinstance-attribute

on_secondary_long_press_cancel: Optional[ControlEventHandler[GestureDetector]] = None

The pointer that previously triggered on_secondary_long_press_down not end up causing a long-press.

on_secondary_long_press_downclass-attributeinstance-attribute

on_secondary_long_press_down: Optional[EventHandler[LongPressDownEvent[GestureDetector]]] = None

Called when a pointer that might cause a long press with a secondary button has contacted the screen.

on_secondary_long_press_endclass-attributeinstance-attribute

on_secondary_long_press_end: Optional[EventHandler[LongPressEndEvent[GestureDetector]]] = None

Called when a pointer that has triggered a long-press with a secondary button has stopped contacting the screen.

on_secondary_long_press_move_updateclass-attributeinstance-attribute

on_secondary_long_press_move_update: Optional[EventHandler[LongPressMoveUpdateEvent[GestureDetector]]] = None

Called when, after a secondary long press has been accepted, the pointer moves.

on_secondary_long_press_startclass-attributeinstance-attribute

on_secondary_long_press_start: Optional[EventHandler[LongPressStartEvent[GestureDetector]]] = None

Triggered when a pointer has remained in contact with the screen at the same location for a long period of time.

on_secondary_long_press_upclass-attributeinstance-attribute

on_secondary_long_press_up: Optional[ControlEventHandler[GestureDetector]] = None

Called when a pointer that has triggered a long press with a secondary button is no longer in contact with the screen.

on_secondary_tapclass-attributeinstance-attribute

on_secondary_tap: Optional[ControlEventHandler[GestureDetector]] = None

A tap with a secondary button has occurred.

on_secondary_tap_cancelclass-attributeinstance-attribute

on_secondary_tap_cancel: Optional[ControlEventHandler[GestureDetector]] = None

The pointer that previously triggered on_secondary_tap_down will not end up causing a tap.

on_secondary_tap_downclass-attributeinstance-attribute

on_secondary_tap_down: Optional[EventHandler[TapEvent[GestureDetector]]] = None

Called when a pointer that might cause a tap with a secondary button has contacted the screen at a particular location.

on_secondary_tap_upclass-attributeinstance-attribute

on_secondary_tap_up: Optional[EventHandler[TapEvent[GestureDetector]]] = None

Called when a pointer that will trigger a tap with a secondary button has stopped contacting the screen at a particular location.

on_tapclass-attributeinstance-attribute

on_tap: Optional[EventHandler[TapEvent[GestureDetector]]] = None

Called when a tap with a primary button has occurred.

on_tap_cancelclass-attributeinstance-attribute

on_tap_cancel: Optional[ControlEventHandler[GestureDetector]] = None

The pointer that previously triggered on_tap_down will not end up causing a tap.

on_tap_downclass-attributeinstance-attribute

on_tap_down: Optional[EventHandler[TapEvent[GestureDetector]]] = None

Called when a pointer that might cause a tap with a primary button has contacted the screen at a particular location.

on_tap_moveclass-attributeinstance-attribute

on_tap_move: Optional[EventHandler[TapMoveEvent[GestureDetector]]] = None

Called when a pointer that triggered a tap has moved.

on_tap_upclass-attributeinstance-attribute

on_tap_up: Optional[EventHandler[TapEvent[GestureDetector]]] = None

Called when a pointer that will trigger a tap with a primary button has stopped contacting the screen at a particular location.

on_tertiary_long_pressclass-attributeinstance-attribute

on_tertiary_long_press: Optional[ControlEventHandler[GestureDetector]] = None

Called when a long press gesture with a tertiary button has been recognized.

on_tertiary_long_press_cancelclass-attributeinstance-attribute

on_tertiary_long_press_cancel: Optional[ControlEventHandler[GestureDetector]] = None

The pointer that previously triggered on_tertiary_long_press_down will not end up causing a long-press.

on_tertiary_long_press_downclass-attributeinstance-attribute

on_tertiary_long_press_down: Optional[EventHandler[LongPressDownEvent[GestureDetector]]] = None

Called when a pointer that might cause a long press with a tertiary button has contacted the screen.

on_tertiary_long_press_endclass-attributeinstance-attribute

on_tertiary_long_press_end: Optional[EventHandler[LongPressEndEvent[GestureDetector]]] = None

Called when a pointer that has triggered a long-press with a tertiary button has stopped contacting the screen.

on_tertiary_long_press_move_updateclass-attributeinstance-attribute

on_tertiary_long_press_move_update: Optional[EventHandler[LongPressMoveUpdateEvent[GestureDetector]]] = None

Called when, after a tertiary long press has been accepted, the pointer moves.

on_tertiary_long_press_startclass-attributeinstance-attribute

on_tertiary_long_press_start: Optional[EventHandler[LongPressStartEvent[GestureDetector]]] = None

Triggered when a pointer has remained in contact with the screen at the same location for a long period of time.

on_tertiary_long_press_upclass-attributeinstance-attribute

on_tertiary_long_press_up: Optional[ControlEventHandler[GestureDetector]] = None

Called when a pointer that has triggered a long press with a tertiary button is no longer in contact with the screen.

on_tertiary_tap_cancelclass-attributeinstance-attribute

on_tertiary_tap_cancel: Optional[ControlEventHandler[GestureDetector]] = None

The pointer that previously triggered on_tertiary_tap_down will not end up causing a tap.

on_tertiary_tap_downclass-attributeinstance-attribute

on_tertiary_tap_down: Optional[EventHandler[TapEvent[GestureDetector]]] = None

Called when a pointer that might cause a tap with a tertiary button has contacted the screen at a particular location.

on_tertiary_tap_upclass-attributeinstance-attribute

on_tertiary_tap_up: Optional[EventHandler[TapEvent[GestureDetector]]] = None

Called when a pointer that will trigger a tap with a tertiary button has stopped contacting the screen at a particular location.

on_vertical_drag_cancelclass-attributeinstance-attribute

on_vertical_drag_cancel: Optional[ControlEventHandler[GestureDetector]] = None

The pointer that previously triggered on_vertical_drag_down will not end up causing a vertical drag.

on_vertical_drag_downclass-attributeinstance-attribute

on_vertical_drag_down: Optional[EventHandler[DragDownEvent[GestureDetector]]] = None

Called when a pointer has contacted the screen and might begin to move vertically.

on_vertical_drag_endclass-attributeinstance-attribute

on_vertical_drag_end: Optional[EventHandler[DragEndEvent[GestureDetector]]] = None

Called when a pointer moving vertically is no longer in contact and was moving at a specific velocity.

on_vertical_drag_startclass-attributeinstance-attribute

on_vertical_drag_start: Optional[EventHandler[DragStartEvent[GestureDetector]]] = None

Called when a pointer has contacted the screen and has begun to move vertically.

on_vertical_drag_updateclass-attributeinstance-attribute

on_vertical_drag_update: Optional[EventHandler[DragUpdateEvent[GestureDetector]]] = None

A pointer moving vertically has moved in the vertical direction.