label_qlist_widget.py 1.4 KB

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