首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PySide QPropertyAnimation未启动

PySide QPropertyAnimation未启动
EN

Stack Overflow用户
提问于 2013-08-17 17:53:54
回答 2查看 1.7K关注 0票数 1

问题是,当我调用QPropertyAnimation.start()时,什么都不会发生。

颜色是我正在动画的属性,按钮是类。

代码语言:javascript
复制
class Button(QPushButton):
    def __init__(self,text="",parent=None):
        super(Button,self).__init__(text,parent)
        # ...
        self.innercolor = QColor(200,0,20)

    def setcolor(self,value): self.innercolor = value
    def getcolor(self): return self.innercolor
    color = Property(QColor,getcolor,setcolor)

    def paintEvent(self, event):
        p = QPainter(self)
        p.fillRect(self.rect(),self.color)
        # ...
        p.end()

    def animated(self,value): print "animating"; self.update()

    def enterEvent(self, event):
        ani = QPropertyAnimation(self,"color")
        ani.setStartValue(self.color)
        ani.setEndValue(QColor(0,0,10))
        ani.setDuration(2000)
        ani.valueChanged.connect(self.animated)
        ani.start()
        print ani.state()
        return QPushButton.enterEvent(self, event)

我很困惑,因为"animating"从来没有打印出来,但是ani.state()说动画正在运行。

我并不是要求调试我的代码或任何东西,但我认为一定有我缺少的东西,无论是在我的代码中,还是在我对QPropertyAnimation的使用的理解中。

我在谷歌搜索了一个答案,但没有任何结果,也没有任何与我相关的东西。我发现的最接近的是another SO question,但我仍然不能把它变成我自己的答案。我还看到了一些关于自定义内插器的东西,我需要做一个自定义内插器吗?如果需要,我该如何做。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-08-17 19:39:20

很酷的密码。它几乎工作,但动画并没有坚持通过enterEvent (虽然我不完全理解的力学)。如果你改变了

代码语言:javascript
复制
ani = QPropertyAnimation(self,"color")

代码语言:javascript
复制
self.ani = QPropertyAnimation(self, "color")
# etc

那就成功了。

票数 2
EN

Stack Overflow用户

发布于 2019-03-08 04:03:11

我很困惑,因为“动画”从来没有打印出来,但是ani.state()说动画正在运行。

print的点,anmiation存在并正在运行。当Python从enterEvent返回时,ani就超出了范围。由于没有对对象的其他引用,Python垃圾收集对象,前提是不需要维护未引用的对象。由于对象被删除,动画永远不会执行。

这很有趣,我很想知道为什么动画必须是对象的属性。

接受的答案将ani更改为self.ani。此更改为作用域enterEvent以外的对象提供了参考。在经过更正的代码中,当enterEvent退出时,对象将维护对ani的引用,并且它不再是由于附加引用而回收的垃圾。当Qt返回到事件循环并成功执行动画时,它就存在了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18291726

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档