كائن QGraphics مع QPropertyAnimation في PyQt
-
11-12-2019 - |
سؤال
لدي خطأ غريب في QPropertyAnimation غير العامل لـ QGraphicsObject.إليك الكود، Pyqt v.4.8.6، Qt 4.6.كما ترون، لا توجد إشارة "قيمة متغيرة" منبعثة.هل هو خطأ أم ماذا أفعل الخطأ؟شكرا لك مقدما!
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
الكائن، لذلك يتم تدميره على الفور قبل أن يتمكن من إصدار أي شيء.
أيضًا في بايثون يمكنك توصيل الإشارات بشكل أكثر أناقة:
anim.valueChanged.connect(self.go)
self.anim = anim
بدلاً من:
self.connect(anim, SIGNAL('valueChanged(const QVariant&)'), self.go)
سوف يحل مشكلتك.
لا تنتمي إلى StackOverflow