PyQt,Qt: QGraphicsItemAniamtion 的问题

发布于 2021-11-26 03:17:21 字数 2071 浏览 670 评论 9

我有下面这两段代码,但是只有第一段正常运行,我绞尽脑汁也想不出是为什么?求大神指点

这两端代码是关于QGraphicsItemAniamtion的应用,但是只有第一段会有动画效果,第二段就没有,也就是第二段代码中的ball 一直都不动。(第一段是文档中的一个例子,第二段是我自己改写的)

我个人觉得这两端代码几乎 等价 啊。。。还求大神指点

#! /usr/bin/python
# -*- coding:utf8 -*- 

from PyQt4 import QtCore, QtGui
from PyQt4.QtCore import *
from PyQt4.QtGui import *

import sys

app = QApplication(sys.argv)

ball = QGraphicsEllipseItem(0, 0, 20, 20)
timer = QTimeLine(5000)
timer.setFrameRange(0, 100)
animation = QGraphicsItemAnimation()
animation.setItem(ball)
animation.setTimeLine(timer)
for i in range(200):
    animation.setPosAt(i / 200.0, QPointF(i, i))
scene = QGraphicsScene()
scene.setSceneRect(0, 0, 250, 250);
scene.addItem(ball)
view = QGraphicsView(scene)

view.show()
timer.start()

sys.exit(app.exec_())



#! /usr/bin/python
# -*- coding:utf8 -*- 

from PyQt4 import QtCore, QtGui
from PyQt4.QtCore import *
from PyQt4.QtGui import *

import sys
class MainScene(QGraphicsScene):
    def __init__(self, parent=None):
        super(MainScene, self).__init__(parent)
        self.setSceneRect(0, 0, 250, 250);
        self.runPerson()

    def runPerson(self):
        print "person run"
        ball = QGraphicsEllipseItem(0, 0, 20, 20)
        timer = QTimeLine(50000)
        timer.setFrameRange(0,100)
        animation = QGraphicsItemAnimation()
        animation.setItem(ball)
        animation.setTimeLine(timer)
        for i in range(200):
            animation.setPosAt(i/200.0, QPointF(i,i))
        self.addItem(ball)
        timer.start()
        print "animation should started"

class MainView(QGraphicsView):
    def __init__(self, parent=None):
        super(MainView, self).__init__(parent)
        self.scene = MainScene(self)
        self.setScene(self.scene)

if __name__ == "__main__":
    app = QApplication(sys.argv)
    mv = MainView()
    mv.show()
    sys.exit(app.exec_())



如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(9

一个人的旅程 2021-11-28 02:30:44

animation作为局部变量在函数退出后销掉了,用self.animation

问题就是出在这个地方

归属感 2021-11-28 02:29:55

你这个在我的机子上,圆是会动的啊...你前面几行的import之类的加上去 我用的py2.7.5

虐人心 2021-11-28 02:25:46

回复
难道是我 ubuntu的原因么,@_@ 前面的import只是为了让代码看起来短一点,所以没贴上来. 谢谢了,

挽清梦 2021-11-28 02:14:49

回复
的确会动,只是50000会动的非常慢.....我也是醉了

终止放荡 2021-11-28 02:09:43

I writ it again in this way, but it still notwork, either.

class MainScene(QGraphicsScene):
    def __init__(self, parent=None):
        super(MainScene, self).__init__(parent)
        self.setSceneRect(0, 0, 250, 250);
        self.runPerson()
 
    def runPerson(self):
        print "person run"
        self.ball = QGraphicsEllipseItem(0, 0, 20, 20)
        self.timer = QTimeLine(50000)
        self.timer.setFrameRange(0,100)
        self.animation = QGraphicsItemAnimation()
        self.animation.setItem(self.ball)
        self.animation.setTimeLine(self.timer)
        for i in range(200):
            self.animation.setPosAt(i/200.0, QPointF(i,i))
        self.addItem(self.ball)
        self.timer.start()
        print "animation should started"
 
class MainView(QGraphicsView):
    def __init__(self, Scene=None, parent=None):
        super(MainView, self).__init__(Scene, parent)

if __name__ == "__main__":
    app = QApplication(sys.argv)
    scene = MainScene()
    mv = MainView(scene)
    mv.show()
    sys.exit(app.exec_())

臻嫒无言 2021-11-28 01:48:48
I writ it again in this way, but it still not work 

class MainScene(QGraphicsScene):
    def __init__(self, parent=None):
        super(MainScene, self).__init__(parent)
        self.setSceneRect(0, 0, 250, 250);
        self.runPerson()
 
    def runPerson(self):
        print "person run"
        self.ball = QGraphicsEllipseItem(0, 0, 20, 20)
        self.timer = QTimeLine(50000)
        self.timer.setFrameRange(0,100)
        self.animation = QGraphicsItemAnimation()
        self.animation.setItem(self.ball)
        self.animation.setTimeLine(self.timer)
        for i in range(200):
            self.animation.setPosAt(i/200.0, QPointF(i,i))
        self.addItem(self.ball)
        self.timer.start()
        print "animation should started"
 
class MainView(QGraphicsView):
    def __init__(self, parent=None):
        super(MainView, self).__init__(parent)
        self.scene = MainScene()
        self.setScene(self.scene)
if __name__ == "__main__":
    app = QApplication(sys.argv)
    mv = MainView(scene)
    mv.show()
    sys.exit(app.exec_())

平定天下 2021-11-28 01:29:43

还有一个问题,animation作为局部变量在函数退出后销掉了,用self.animation

悲喜皆因你 2021-11-27 14:26:46

回复
I writ it again in this way, but it still not work . can you correct it for me ? thanks

坐在坟头思考人生 2021-11-27 07:41:59

self.scene 把 scene函数覆盖掉了!

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文