QGraphicsPathItem .setPen () влияет на стиль текста - PullRequest
1 голос
/ 01 февраля 2020

сообщество переполнения стека. Позвольте мне объяснить мой вопрос, ссылаясь на код, показанный ниже

from PyQt5 import QtCore, QtGui, QtWidgets


class PortItem(QtWidgets.QGraphicsPathItem):
    def __init__(self, parent=None):
        super().__init__(parent)
        pen=QtGui.QPen(QtGui.QColor("black"), 2)
        self.setPen(pen)        
        self.end_ports = []
        self.setFlags(QtWidgets.QGraphicsItem.ItemIsMovable | QtWidgets.QGraphicsItem.ItemSendsGeometryChanges)


class Symbol_Z(PortItem):
    __partCounter=0

    def __init__(self):
        super().__init__()
        self.__partName= "FixedTerms"
        self.__partCounter+=1
        self.drawSymbol()

    def drawSymbol(self):
        path=QtGui.QPainterPath()
        path.moveTo(0, 40)
        path.lineTo(20, 40)
        path.addRect(QtCore.QRectF(20, 30, 40, 20))
        path.moveTo(60, 40)
        path.lineTo(80, 40)
        path.addText(20, 25, QtGui.QFont('Times', 20), self.__partName)
        self.setPath(path)


class GraphicsView(QtWidgets.QGraphicsView):
    def __init__(self, scene=None, parent=None):
        super().__init__(scene, parent)
        self.setRenderHints(QtGui.QPainter.Antialiasing)


class MainWindow(QtWidgets.QMainWindow):
    def __init__(self, parent=None):
        super().__init__(parent)
        scene=QtWidgets.QGraphicsScene()
        graphicsview=GraphicsView(scene)

        item=Symbol_Z()
        item.setPos(QtCore.QPointF(0, 250))
        scene.addItem(item)

        self.setCentralWidget(graphicsview)


if __name__ == "__main__":
    import sys

    app = QtWidgets.QApplication(sys.argv)
    w = MainWindow()
    w.resize(640, 480)
    w.show()
    sys.exit(app.exec_())

Моя проблема в том, что строки:

  • pen = Qt Gui .QPen (Qt Gui. QColor («черный»), 2)
  • self.setPen (ручка)

воздействовать на линию:

  • path.addText (20, 25 , Qt Gui .QFont ('Times', 20), self .__ partName)

Знаете ли вы, как добавить текст независимо? Когда я попытался добавить его, у меня возникла проблема, заключающаяся в том, что рисунок и текст не связаны, и только символ мог быть перемещен с помощью мыши, а не оба (рисунок и текст) вместе.

1 Ответ

1 голос
/ 01 февраля 2020

Одним из возможных решений является создание другого QGraphicsPathItem, который является дочерним элементом элемента, поэтому относительные координаты не изменятся и QPen родительского элемента не повлияет на него.

def drawSymbol(self):
    path = QtGui.QPainterPath()
    path.moveTo(0, 40)
    path.lineTo(20, 40)
    path.addRect(QtCore.QRectF(20, 30, 40, 20))
    path.moveTo(60, 40)
    path.lineTo(80, 40)
    self.setPath(path)

    text_item = QtWidgets.QGraphicsPathItem(self)
    text_item.setBrush(QtGui.QColor("black"))
    child_path = QtGui.QPainterPath()
    child_path.addText(20, 25, QtGui.QFont("Times", 20), self.__partName)
    text_item.setPath(child_path)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...