def on_paint(self, painter, style_option, widget=None): lod = style_option.levelOfDetailFromTransform(painter.worldTransform()) # painting circle painter.setBrush(self.color_background) painter.setPen(self.pen_outline) painter.drawEllipse(-self.radius, -self.radius, 2 * self.radius, 2 * self.radius) if self.show_label: painter.setFont(self.font_label) painter.setPen(self.pen_label) is_left = self.socket_position in (SocketPosition.LEFT_BOTTOM, SocketPosition.LEFT_TOP) alignment = QtCore.Qt.AlignVCenter if is_left: alignment |= QtCore.Qt.AlignLeft else: alignment |= QtCore.Qt.AlignRight node = self.parent() width = node.width / 2 - self.radius - self.outline_width height = self.radius * 2 offset = 2 * self.radius + self.outline_width x = offset if is_left else -width - offset y = -self.radius rect = QtCore.QRectF(x, y, width, height) painter.drawText(rect, alignment, self.name)
def boundingRect(self): p = self.proxy return QtCore.QRectF( -p.radius - p.outline_width, -p.radius - p.outline_width, 2 * (p.radius + p.outline_width), 2 * (p.radius + p.outline_width), )
def __init__(self, e, ids=None): """ Creates a QtPainterPath from an SVG document applying all transforms. Does NOT include any styling. Parameters ---------- e: Element or string An lxml etree.Element or an argument to pass to etree.parse() ids: List List of node ids to include. If not given all will be used. """ self.isParentSvg = not isinstance(e, EtreeElement) self.ids = ids or [] if self.isParentSvg: self._doc = etree.parse(e) self._svg = self._doc.getroot() self.viewBox = QtCore.QRectF(0, 0, -1, -1) super(QtSvgDoc, self).__init__(self._svg)
def __init__(self, e, ids=None): """ Creates a QtPainterPath from an SVG document applying all transforms. Does NOT include any styling. Parameters ---------- e: Element or string An lxml etree.Element or an argument to pass to etree.parse() ids: List List of node ids to include. If not given all will be used. """ self.isParentSvg = not isinstance(e, EtreeElement) if self.isParentSvg: self._doc = etree.parse(e) self._svg = self._doc.getroot() if ids: nodes = set() xpath = self._svg.xpath for node_id in ids: nodes.update(set(xpath('//*[@id="%s"]' % node_id))) # Find all nodes and their parents valid_nodes = set() for node in nodes: valid_nodes.add(node) parent = node.getparent() while parent: valid_nodes.add(parent) parent = parent.getparent() self._nodes = valid_nodes self.viewBox = QtCore.QRectF(0, 0, -1, -1) super(QtSvgDoc, self).__init__(self._svg, self._nodes)
def _default_area(self): return QtCore.QRectF(0, 0, self.size[0], self.size[1])
def available_area(self): x, y = self.padding_left, self.padding_bottom w, h = (self.size[0] - (self.padding_right + self.padding_left), self.size[1] - (self.padding_bottom + self.padding_top)) return QtCore.QRectF(x, y, w, h)
def fitInView(self, bbox): if self.widget is not None: self.widget.fitInView(QtCore.QRectF(*bbox), QtCore.Qt.KeepAspectRatio)
def boundingRect(self): return QtCore.QRectF(0., 0., float(self.proxy.width), float(self.proxy.height)).normalized()