draganddrop.py 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. from __future__ import annotations
  2. from typing import Optional
  3. from nicegui import ui
  4. class column(ui.column):
  5. def __init__(self, name: str) -> None:
  6. super().__init__()
  7. with self.classes('bg-grey-5 w-60 p-4 rounded shadow-2'):
  8. ui.label(name).classes('text-bold ml-1')
  9. self.on('dragover.prevent', self.highlight)
  10. self.on('dragleave', self.unhighlight)
  11. self.on('drop', self.move_card)
  12. def highlight(self) -> None:
  13. self.classes(add='bg-grey-2')
  14. def unhighlight(self) -> None:
  15. self.classes(remove='bg-grey-2')
  16. def move_card(self) -> None:
  17. self.unhighlight()
  18. card.dragged.parent_slot.parent.remove(card.dragged)
  19. with self:
  20. card(card.dragged.text)
  21. class card(ui.card):
  22. dragged: Optional[card] = None
  23. def __init__(self, text: str) -> None:
  24. super().__init__()
  25. self.text = text
  26. with self.props('draggable').classes('w-full cursor-pointer bg-grey-1'):
  27. ui.label(self.text)
  28. self.on('dragstart', self.handle_dragstart)
  29. def handle_dragstart(self) -> None:
  30. card.dragged = self