def __init__(self, data, radius=15): self.data = data # Add circular node self.node = QGraphicsEllipseItem(0, 0, 1, 1) # Set radius self.radius = radius # Add text label self.label = QGraphicsTextItem(data.label) font = self.label.font() font.setPointSize(10) self.label.setFont(font) # Add line between label and node self.line1 = QGraphicsLineItem(0, 0, 1, 1) self.line2 = QGraphicsLineItem(0, 0, 1, 1) self.node.setZValue(20) self.label.setZValue(10) self.line1.setZValue(10) self.line2.setZValue(10) self.line1.setPen(get_pen('0.5')) self.line2.setPen(get_pen('0.5')) self.color = '0.8'
def __init__(self, parent=None, width=1, color1=QColor(0, 0, 0), color2=QColor(255, 255, 255)): super(DualColoredLineSegment, self).__init__(parent) # create lines self.line_1 = QGraphicsLineItem() self.line_2 = QGraphicsLineItem() self.width = width self._length = 2 self._spacing = 5 # set pen self.setColor1(color1) self.setColor2(color2) # add lines to group self.addToGroup(self.line_1) self.addToGroup(self.line_2)
def start_connecting(self, c, event): self.connection_in_progress_from = c x, y = c.get_connection_point() p1 = self.mapToParent( self.mapFromScene(c.parentItem().mapToScene(x, y))) x1 = p1.x() y1 = p1.y() p2 = self.mapFromScene(event.scenePos()) self.connection_in_progress_line = QGraphicsLineItem( x1, y1, p2.x(), p2.y()) self.connection_in_progress_line.setParentItem(self) self.connection_in_progress_line.setPen(QPen(highlight_color, 4)) c.setPen(QPen(highlight_color, 4)) self.set_hover_highlight_connectors(True)
def __init__(self, longitudes, latitudes, parent=None): QGraphicsItem.__init__(self, parent=parent) MapItem.__init__(self) assert len(longitudes) == len(latitudes) assert len(longitudes) >= 2 self._longitudes = np.array(longitudes, dtype=np.float64) self._latitudes = np.array(latitudes, dtype=np.float64) # Setup internal lines linesGroup = QGraphicsItemGroup(parent=self) self._linesGroup = linesGroup self._lines = [ QGraphicsLineItem(parent=linesGroup) for i in iterRange(len(longitudes) - 1) ]
def setAngledTexts(self, angledTexts: List[AngledText]) -> None: self._angledTexts = angledTexts self._lineItems.clear() self._textItems.clear() scene: QGraphicsScene = self.scene() for item in self.childItems(): item: QGraphicsItem = item self.removeFromGroup(item) if scene is not None: scene.removeItem(item) for angledText in self._angledTexts: lineItem = QGraphicsLineItem(self.parentItem()) self.addToGroup(lineItem) self._lineItems.append(lineItem) textItem = QGraphicsTextItem(self.parentItem()) textItem.setPlainText(angledText.text) self.addToGroup(textItem) self._textItems.append(textItem)
def setLonLat(self, longitudes, latitudes): assert len(longitudes) == len(latitudes) assert len(longitudes) >= 2 self._longitudes = np.array(longitudes, dtype=np.float64) self._latitudes = np.array(latitudes, dtype=np.float64) old_lines = self._lines for line in old_lines: line.setParentItem(None) scene = self.scene() if scene is not None: for line in old_lines: scene.removeItem(line) linesGroup = self._linesGroup self._lines = [ QGraphicsLineItem(parent=linesGroup) for i in iterRange(len(longitudes) - 1) ] if scene is not None: self.updatePosition(scene)
def addLine(self, text, color, width=1.): shape = QGraphicsLineItem(10., 10., 20., 20.) pen = makePen(color, width=width) shape.setPen(pen) self.addEntry(MapLegendEntryItem(shape, text))