from typing import Union, List, Tuple, Callable, Any, TypeAlias 
from PySide6 import QtCore
from enum import Enum, auto


class Events(Enum):
    action: QtCore.QEvent = auto()
    change: QtCore.QEvent = auto()
    child: QtCore.QEvent = auto()
    close: QtCore.QEvent = auto()
    context_menu: QtCore.QEvent = auto()
    custom: QtCore.QEvent = auto()
    drag_enter: QtCore.QEvent = auto()
    drag_leave: QtCore.QEvent = auto()
    drag_move: QtCore.QEvent = auto()
    drop: QtCore.QEvent = auto()
    editor: QtCore.QEvent = auto()
    enter: QtCore.QEvent = auto()
    focus_in: QtCore.QEvent = auto()
    focus_out: QtCore.QEvent = auto()
    grab_keyboard: QtCore.QEvent = auto()
    grab_mouse: QtCore.QEvent = auto()
    help: QtCore.QEvent = auto()
    hide: QtCore.QEvent = auto()
    hover_enter: QtCore.QEvent = auto()
    hover_leave: QtCore.QEvent = auto()
    hover_move: QtCore.QEvent = auto()
    input_method: QtCore.QEvent = auto()
    key_press: QtCore.QEvent = auto()
    key_release: QtCore.QEvent = auto()
    leave: QtCore.QEvent = auto()
    mouse_double_click: QtCore.QEvent = auto()
    mouse_move: QtCore.QEvent = auto()
    mouse_press: QtCore.QEvent = auto()
    mouse_release: QtCore.QEvent = auto()
    move: QtCore.QEvent = auto()
    native: QtCore.QEvent = auto()
    paint: QtCore.QEvent = auto()
    polish: QtCore.QEvent = auto()
    resend_prepare: QtCore.QEvent = auto()
    resize: QtCore.QEvent = auto()
    scene: QtCore.QEvent = auto()
    send: QtCore.QEvent = auto()
    show: QtCore.QEvent = auto()
    tablet: QtCore.QEvent = auto()
    timer: QtCore.QEvent = auto()
    ungrab_keyboard: QtCore.QEvent = auto()
    ungrab_mouse: QtCore.QEvent = auto()
    viewport: QtCore.QEvent = auto()
    wheel: QtCore.QEvent = auto()
    widget: QtCore.QEvent = auto()
    window_frame: QtCore.QEvent = auto()

EventTypeVar: TypeAlias = List[Tuple[Union[Events, str], Callable[..., Any]]]
