سؤال

لدي خطأ غريب في 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)

سوف يحل مشكلتك.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top