main.py 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. #!/usr/bin/env python3
  2. from __future__ import annotations
  3. from typing import Optional
  4. from nicegui import ui
  5. class Column(ui.column):
  6. def __init__(self, name: str) -> None:
  7. super().__init__()
  8. with self.classes('bg-gray-200 w-48 p-4 rounded shadow'):
  9. ui.label(name).classes('text-bold')
  10. self.on('dragover.prevent', self.highlight)
  11. self.on('dragleave', self.unhighlight)
  12. self.on('drop', self.move_card)
  13. def highlight(self) -> None:
  14. self.classes(add='bg-gray-400')
  15. def unhighlight(self) -> None:
  16. self.classes(remove='bg-gray-400')
  17. def move_card(self) -> None:
  18. self.unhighlight()
  19. Card.dragged.parent_slot.parent.remove(Card.dragged)
  20. with self:
  21. Card(Card.dragged.text)
  22. class Card(ui.card):
  23. dragged: Optional[Card] = None
  24. def __init__(self, text: str) -> None:
  25. super().__init__()
  26. self.text = text
  27. with self.props('draggable').classes('w-full cursor-pointer'):
  28. ui.label(self.text)
  29. self.on('dragstart', self.handle_dragstart)
  30. def handle_dragstart(self) -> None:
  31. Card.dragged = self
  32. with ui.row():
  33. with Column('Next'):
  34. Card('Clean up the kitchen')
  35. Card('Do the laundry')
  36. Card('Go to the gym')
  37. with Column('Doing'):
  38. Card('Make dinner')
  39. with Column('Done'):
  40. Card('Buy groceries')
  41. ui.run()