QGraphicsLineItem изменить координаты
Подвинуть линию на сцене по координатам x,y можно функцией moveBy. Собственно вопрос, как поменять координаты точек p2(x1, y1). Мне например нужно подвинуть точку p2(y1), я пытаюсь вызватьsetLine(QLineF(0,0,0,-300)), точка p2(y1) отлично передвигается на нужно мне место, НО!!! координата p1(y0), тоже едет вниз на 200 пикселей, то есть, были начальные координаты (0,0,0,-100), после вызова функции setLine(QLineF(0,0,0,-300)), они становятся (0,200,0,-300), так вроде не должно быть, как это работает? И еще нюанс, я пытаюсь прочитать координаты линии через функцию pos, и там мне возвращается значение, которое и должно быть после вызова функции setLine(QLineF(0,0,0,-300)), а именно (0,0,0,-300), но на визуальной составляющей, происходит то, что описано выше. Код на всякий случай:
class CustomGraphView(QWidget):
mainLayout: QHBoxLayout
mainScene: QGraphicsScene
mainGraphicsView: QGraphicsView
itemGroup: QGraphicsItemGroup
line: QGraphicsLineItem
posYInc: float
timer: QTimer
def __init__(self):
super().__init__()
self.setMinimumSize(2000, 1000)
self.show()
self.mainLayout = QHBoxLayout()
self.setLayout(self.mainLayout)
self.mainScene = QGraphicsScene()
self.mainGraphicsView = QGraphicsView()
# self.mainGraphicsView.setSceneRect(float(QRect().x()), float(QRect().y()), float(QRect().width()), float(QRect().height()))
self.mainGraphicsView.setScene(self.mainScene)
self.mainLayout.addWidget(self.mainGraphicsView)
# rectangle = QGraphicsRectItem(0, 0, 500, 50)
# # rectangle.setFlag(QGraphicsItem.GraphicsItemFlag.ItemIsMovable, True)
# self.mainScene.addItem(rectangle)
self.itemGroup = QGraphicsItemGroup()
self.mainScene.addItem(self.itemGroup)
self.posYInc = 0
self.line = QGraphicsLineItem(0, 0, 0, 100)
pen = QPen(Qt.PenStyle.SolidLine)
pen.setBrush(QBrush(QColor(255, 0, 255)))
self.line.setPen(pen)
self.itemGroup.addToGroup(self.line)
self.timer = QTimer()
self.timer.timeout.connect(self.thread)
self.timer.start(1)
def thread(self):
self.posYInc += 0.05
# self.line.setPos(0, self.posYInc)
# self.line.moveBy(0, 0.1)
self.line.setLine(QLineF(0, 0, 0, 100 + self.posYInc))
Ответы (1 шт):
Оказывается, все отлично работает, просто нужно было ограничить сцену размерами , в моем случае размерами окна:
self.mainScene = QGraphicsScene()
self.mainGraphicsView = QGraphicsView()
self.mainGraphicsView.setScene(self.mainScene)
self.mainGraphicsView.setSceneRect(float(self.rect().x()), float(self.rect().y()), float(self.rect().width()), float(self.rect().height()))
self.mainLayout.addWidget(self.mainGraphicsView)