label_qlist_widget.py 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. from qtpy import QtWidgets
  2. from .escapable_qlist_widget import EscapableQListWidget
  3. class LabelQListWidget(EscapableQListWidget):
  4. def __init__(self, *args, **kwargs):
  5. super(LabelQListWidget, self).__init__(*args, **kwargs)
  6. self.canvas = None
  7. self.itemsToShapes = []
  8. self.setSelectionMode(QtWidgets.QAbstractItemView.ExtendedSelection)
  9. def get_shape_from_item(self, item):
  10. for index, (item_, shape) in enumerate(self.itemsToShapes):
  11. if item_ is item:
  12. return shape
  13. def get_item_from_shape(self, shape):
  14. for index, (item, shape_) in enumerate(self.itemsToShapes):
  15. if shape_ is shape:
  16. return item
  17. def clear(self):
  18. super(LabelQListWidget, self).clear()
  19. self.itemsToShapes = []
  20. def setParent(self, parent):
  21. self.parent = parent
  22. def dropEvent(self, event):
  23. shapes = self.shapes
  24. super(LabelQListWidget, self).dropEvent(event)
  25. if self.shapes == shapes:
  26. return
  27. if self.canvas is None:
  28. raise RuntimeError('self.canvas must be set beforehand.')
  29. self.parent.setDirty()
  30. self.canvas.loadShapes(self.shapes)
  31. @property
  32. def shapes(self):
  33. shapes = []
  34. for i in range(self.count()):
  35. item = self.item(i)
  36. shape = self.get_shape_from_item(item)
  37. shapes.append(shape)
  38. return shapes