Я хочу, чтобы сделать автомобиль следовать по пути, так что я попробовал анимировать обычай QGraphicsItem (с описанием в «автомобиль») с использованием QPropreties, начиная с помощью примера, приведенного на PySide документации:Анимационные пользовательский QGraphicsItem с QPropretyAnimation
self.anim = QtCore.QPropertyAnimation(self.car, "geometry")
self.anim.setDuration(4000);
self.anim.setStartValue(QtCore.QRect(0, 0, 100, 30));
self.anim.setEndValue(QtCore.QRect(250, 250, 100, 30));
self.anim.start();
self.car
здесь является экземпляром автомобиля, класс, который наследует от QGraphicsItem
и QObject
(EDIT Изменено этом см EDIT 2
):
class Car(QtGui.QGraphicsItem, QtCore.QObject):
def __init__(self, map = None, ....):
super(Car, self).__init__()
self.map = map
....
Я всегда получаю один и тот же код ошибки при выполнении этого:
QPropertyAnimation::updateState (geometry): Changing state of an animation without target
Это странно, поскольку цель действительно установлен! Я попытался поставить setTargetObject (см. documentation on PySide), но ничего не изменил.
Любая идея о том, откуда это может произойти?
EDIT: Что-то, что может помочь -> Я попытался положить эти три строки и результат показывает, что объект не принимается во внимание:
print self.car
self.anim.setTargetObject(self.car)
print self.anim.targetObject()
Результат
<engine.Car(this = 0x43f9200 , parent = 0x0 , pos = QPointF(0, 0) , z = 0 , flags = (ItemIsMovable | ItemIsSelectable)) at 0x1de0368>
None
EDIT 2: Изменение наследования класса на QGraphicsObject
, похоже, решил проблему «без цели»! Но у меня другая ошибка сейчас (с помощью настраиваемого определено свойство «поз»):
QPropertyAnimation::updateState (pos, Car,): starting an animation without end value
Я определил свою собственность таким образом:
def setPos(self, pos):
self.x = pos[0]
self.y = pos[1]
self.update()
def readPos(self):
return (self.x, self.y)
pp = QtCore.Property('tuple', readPos, setPos)
'QGraphicsItem' не имеет атрибута геометрии.Вы, вероятно, хотите либо анимировать 'boundingRect' (который, как я считаю, невозможен), или какое-либо другое свойство, которое вы создаете сами, которое контролирует, насколько большой вы рисуете автомобиль. –