【发布时间】:2013-03-31 11:01:33
【问题描述】:
我想让汽车跟随路径,所以我尝试使用 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 和 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),但它没有改变任何东西。
知道这可能来自哪里吗?
编辑: 有帮助的东西 -> 我试着把这三行放在里面,结果表明没有考虑到对象:
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)
【问题讨论】:
-
QGraphicsItem没有几何属性。您可能想要为boundingRect设置动画(我认为这是不可能的),或者您自己创建的其他一些属性来控制您绘制汽车的大小。
标签: python qt user-interface pyside