около 3 недель назад я попросил изменить GraphicsItem в GraphicsScene.Это была строка, и решение было: self.setLine (..).Теперь я пытаюсь понять, двигая это непрерывно.Итак, у меня есть графическое представление gvCanvas и внутри сцены, и я инициализирую прямоугольники, линии ... Это работает
Для перемещения прямоугольника у меня есть следующий код для класса myRect с __init__
и movemyrect
class myRect(QtWidgets.QGraphicsRectItem):
def __init__(self, QRectF): # *args):
QtWidgets.QGraphicsRectItem.__init__(self)
self.setRect(QRectF)
self.setFlag(QtWidgets.QGraphicsItem.ItemIsSelectable, True)
self.setPen(QtGui.QPen(QtCore.Qt.white, 3))
def movemyRect(self, x, y, angl):
myyrs = QtWidgets.QGraphicsRectItem.rect(self) #(self.myyr) #line(items[0])
ptrr = myyrs.bottomLeft()
xpos = ptrr.x() + x #+x
ypos = ptrr.y() - y
ptnew=QtCore.QPoint(xpos,ypos)
myr = QtCore.QRectF(ptnew, QtCore.QSizeF(15,15))
self.setRotation(angl)
self.setRect(myr)
self.update()
Затем я пытаюсь перемещаться по прямоугольнику
xm =20
ym = 20
for i in range(1,5):
time.sleep(0.8)
print("nachsleep",i)
self.rect2.movemyRect(xm, ym, 10)
myyrs = QtWidgets.QGraphicsRectItem.rect(self.rect2)
self.rect2.setRect(myyrs)
self.scene.update()
listtreffer = self.scene.collidingItems(self.lnk, mode=Qt.IntersectsItemShape)
for treffer in listtreffer:
print("treffer", treffer)
Цикл работает, но перемещенный и повернутый прямоугольник кажется измененным только в конце цикла на моей сцене, а не после каждого шага.Я подумал, с оператором "setRect ..." он должен работать при каждом проходе по циклу.Также не помогает scene.update ().
Если я делаю это без цикла, это тоже работает.
Что плохого в том, что перемещенный прямоугольник не появляется на каждом шаге цикла?
Оператор с проверкой столкновения работает правильно на каждом шаге.
Вотдополнительный вопрос: если я хочу только проверку столкновения этого прямоугольника, было бы лучше определить своего рода проверку столкновения в определении класса, а не в этом цикле?
(я также пытаюсь сделать то же самоес анимацией и QPropertyAnimantion. Там я не могу запустить или запустить предварительное заявление. Проверить столкновение, даже когда работает aroud. Но я думаю, для этого я должен открыть новый вопрос)