車をパスに沿って動かしたいので、PySide のドキュメントに記載されている例から始めて、QPropreties を使用してカスタム QGraphicsItem (「車」を記述) をアニメーション化してみました:
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
これは Car のインスタンスで、 andを継承するクラスです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 ( PySide のドキュメントを参照) を入れてみましたが、何も変わりませんでした。
それがどこから来るのかについて何か考えはありますか?
編集:役立つもの -> これらの 3 行を入れてみましたが、結果はオブジェクトが考慮されていないことを示しています:
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
と、「ターゲットなし」の問題が解決したようです! しかし、今は別のエラーがあります (カスタム定義のプロパティ '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)