GridViewerCell.py 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. '''
  2. ** By Cro-Ki l@b, 2017 **
  3. '''
  4. from PyQt5.QtCore import QPointF
  5. from PyQt5.QtGui import QPolygonF, QPen, QBrush, QColor, QFont
  6. from PyQt5.QtWidgets import QGraphicsPolygonItem, QGraphicsItem, \
  7. QGraphicsSimpleTextItem
  8. class GridViewerCell(QGraphicsPolygonItem):
  9. def __init__(self, gridViewer, x, y):
  10. super(GridViewerCell, self).__init__()
  11. self.gridViewer = gridViewer
  12. self.x = x
  13. self.y = y
  14. self.selected = False
  15. def generate(self, points, show_label=False):
  16. qpolygon = QPolygonF([QPointF(xp, yp) for xp, yp in points])
  17. self.setPolygon(qpolygon)
  18. pen = QPen()
  19. pen.setWidth(3)
  20. self.setPen(pen)
  21. self.setFlag(QGraphicsItem.ItemIsFocusable)
  22. self.label = QGraphicsSimpleTextItem("{}-{}".format(self.x, self.y), parent=self)
  23. self.label.setVisible(show_label)
  24. if len(points) == 6:
  25. k = 0.5 if (self.x % 2) != 0 else 0
  26. self.label.setPos(QPointF(((self.x * 0.866) + 0.2886) * 120, (self.y + k + 0.5) * 120))
  27. else:
  28. self.label.setPos(QPointF(self.x * 120, self.y * 120))
  29. font = QFont()
  30. font.setPointSize(20)
  31. self.label.setFont(font)
  32. def select(self):
  33. self.setBrush(QBrush(QColor(200, 0, 0, 100)))
  34. self.selected = True
  35. self.gridViewer.add_to_selection(self.x, self.y)
  36. def unselect(self):
  37. self.setBrush(QBrush())
  38. self.selected = False
  39. self.gridViewer.remove_from_selection(self.x, self.y)
  40. def mousePressEvent(self, *args, **kwargs):
  41. if self.selected:
  42. self.unselect()
  43. else:
  44. self.select()
  45. def show_label(self, visible):
  46. self.label.setVisible(visible)