我想让汽车沿着路径行驶,所以我尝试使用 QPropreties 为自定义 QGraphicsItem(描述“汽车”)设置动画,从 PySide 文档中给出的示例开始:
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
这是 Car 的一个实例,它是一个继承自QGraphicsItem
and的类QObject
(编辑更改了这个,请参阅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 (请参阅PySide 上的文档),但它没有改变任何东西。
关于这可能来自哪里的任何想法?
编辑:可以提供帮助的东西->我尝试输入这三行,结果表明没有考虑到该对象:
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
编辑 2:将类继承更改为QGraphicsObject
似乎解决了“无目标”问题!但我现在有一个不同的错误(使用自定义属性'pos'):
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)