unique_label_qlist_widget.py 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. from qtpy.QtCore import Qt
  2. from qtpy import QtWidgets
  3. from .escapable_qlist_widget import EscapableQListWidget
  4. class UniqueLabelQListWidget(EscapableQListWidget):
  5. def mousePressEvent(self, event):
  6. super().mousePressEvent(event)
  7. if not self.indexAt(event.pos()).isValid():
  8. self.clearSelection()
  9. def findItemsByLabel(self, label):
  10. items = []
  11. for row in range(self.count()):
  12. item = self.item(row)
  13. if item.data(Qt.UserRole) == label:
  14. items.append(item)
  15. return items
  16. def createItemFromLabel(self, label):
  17. item = QtWidgets.QListWidgetItem()
  18. item.setData(Qt.UserRole, label)
  19. return item
  20. def setItemLabel(self, item, label, color=None):
  21. qlabel = QtWidgets.QLabel()
  22. if color is None:
  23. qlabel.setText('{}'.format(label))
  24. else:
  25. qlabel.setText(
  26. '{} <font color="#{:02x}{:02x}{:02x}">●</font>'
  27. .format(label, *color)
  28. )
  29. qlabel.setAlignment(Qt.AlignBottom)
  30. item.setSizeHint(qlabel.sizeHint())
  31. self.setItemWidget(item, qlabel)