QGraphicsObject с Qpropertyanimation в PYQT
-
11-12-2019 - |
Вопрос
У меня есть странная ошибка с неуважением Qpropertyanimation для QGraphicsObject.Вот код, PYQT v.4.8.6, Qt 4.6.Как видите, нет «ValueChanged» сигнала. Это ошибка или что я делаю не так?Заранее спасибо!
import sys
from PyQt4.QtGui import *
from PyQt4.QtCore import *
from functools import partial
class GObject(QGraphicsObject):
def boundingRect(self):
return QRectF(0, 0, 10, 10)
def paint(self, p, *args):
p.drawRect(self.boundingRect())
def animatePos(self, start, end):
print 'Animating..'
anim = QPropertyAnimation(self, 'pos')
anim.setDuration(400)
anim.setStartValue(start)
anim.setEndValue(end)
self.connect(anim, SIGNAL('valueChanged(const QVariant&)'), self.go)
#self.connect(anim, SIGNAL('stateChanged ( QAbstractAnimation::State, QAbstractAnimation::State )'),self.ttt)
anim.start( ) #QAbstractAnimation.DeleteWhenStopped)
def go(self, t):
print t
class Scene_Chooser(QWidget):
def __init__(self, parent = None):
super(Scene_Chooser, self).__init__(parent)
vbox = QVBoxLayout(self)
vbox.setContentsMargins(0, 0, 0, 0)
view = QGraphicsView(self)
self.scene = QGraphicsScene(self)
obj = GObject()
self.scene.addItem(obj)
view.setScene(self.scene)
btn = QPushButton('animate', self)
vbox.addWidget(view)
vbox.addWidget(btn)
btn.clicked.connect(partial(obj.animatePos, QPointF(0,0), QPointF(10, 5)))
. Решение
Вы не держите никаких ссылок на ваш объект anim
, поэтому он немедленно разрушается, прежде чем он сможет что-то извлечь.
Также в Python вы можете подключить сигналы гораздо более элегантнее:
anim.valueChanged.connect(self.go)
self.anim = anim
.
вместо:
self.connect(anim, SIGNAL('valueChanged(const QVariant&)'), self.go)
.
исправит вашу проблему.
Не связан с StackOverflow