PushButton在Qt4中没有动画

时间:2014-01-12 12:29:31

标签: python pyqt

我是这个论坛以及Python和PyQt的新手。 在完成一些基础知识之后,在尝试使用Qt学习动画时,我希望编写一个简单的应用程序,其中将PushButton从屏幕左侧动画地带到另一个按钮点击的某个位置。在这个过程中,我最终编写了这样的代码:

class AppMainUI(QtGui.QMainWindow, Ui_MainWindow):

    def __init__(self):
        QtGui.QMainWindow.__init__(self)

        self.setupUi(self)

    self.setWindowFlags(QtCore.Qt.Window|QtCore.Qt.FramelessWindowHint)
    self.connect(self.pushButton_4, QtCore.SIGNAL("clicked()"), self.onExitClicked)
    self.connect(self.pushButton_5, QtCore.SIGNAL("clicked()"), self.animateButtons)

    def animateButtons(self):
        animation = QtCore.QPropertyAnimation(self.pushButton, "geometry")
        animation.setDuration(2)
        animation.setStartValue(QtCore.QRect(0, 0, self.pushButton.width(), self.pushButton.height()))
        animation.setEndValue(QtCore.QRect(760, 280, self.pushButton.width(), self.pushButton.height()))
        animation.setEasingCurve(QtCore.QEasingCurve.OutElastic)
        animation.start()

    def onExitClicked(self):
        sys.exit(0)

App = QtGui.QApplication(sys.argv)
UI = AppMainUI()
UI.show()
App.exec_()

我看到的是按钮移动到位置(0,0),这实际上是我动画的开始位置。我在这里做错了吗?

1 个答案:

答案 0 :(得分:2)

问题是由于垃圾收集器;当方法animateButtons(self)完成animation.start()语句时,{em>垃圾收集器会销毁animation对象,因此动画不会发生。

只需在对象名称的开头添加self

self.animation = QtCore.QPropertyAnimation(...)
self.animation.setStartValue(...)
...

同时将持续时间增加到至少1000毫秒,以便动画变得可见,否则它会被执行得如此之快以至于你无法看到它。