menu.py 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. from typing import Callable, Optional
  2. from .. import globals
  3. from ..events import ClickEventArguments, handle_event
  4. from .mixins.text_element import TextElement
  5. from .mixins.value_element import ValueElement
  6. class Menu(ValueElement):
  7. def __init__(self, *, value: bool = False) -> None:
  8. """Menu
  9. Creates a menu.
  10. :param value: whether the menu is already opened (default: `False`)
  11. """
  12. super().__init__(tag='q-menu', value=value, on_value_change=None)
  13. self._props['no-parent-event'] = True
  14. def open(self) -> None:
  15. self.value = True
  16. def close(self) -> None:
  17. self.value = False
  18. class MenuItem(TextElement):
  19. def __init__(self, text: str = '', on_click: Optional[Callable] = None, *, auto_close: bool = True) -> None:
  20. """Menu Item
  21. A menu item to be added to a menu.
  22. :param text: label of the menu item
  23. :param on_click: callback to be executed when selecting the menu item
  24. :param auto_close: whether the menu should be closed after a click event (default: `True`)
  25. """
  26. super().__init__(tag='q-item', text=text)
  27. self.menu: Menu = globals.get_slot().parent
  28. self._props['clickable'] = True
  29. def handle_click(_) -> None:
  30. handle_event(on_click, ClickEventArguments(sender=self, client=self.client))
  31. if auto_close:
  32. self.menu.close()
  33. self.on('click', handle_click)