unique_label_qlist_widget.py 1.3 KB

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