如何使用动画动画显示/隐藏子QWidget?

时间:2011-08-18 14:05:47

标签: python animation qt4 pyqt

我正在处理一个有两个孩子的应用程序。一个用作工具栏的小部件,下面的第二个用作仪表板,信息将出现在仪表板上。后者可以用前者的按钮显示/隐藏。 Here's a screen-cast of the prototype

现在我正在考虑做同样的事情,但是在显示/隐藏下部小部件的同时使用动画动画。

简而言之:效果应该是让整个应用程序在切换仪表板时逐渐上升或下降的印象。

详细信息:我希望下方窗口小部件的高度减小,直到它减少到0然后完全隐藏。同样,再次显示窗口小部件时会慢慢增加。同时应用程序的位置应相应改变,使其保持在屏幕的底部。

我该怎么做?我之前从未对Qt做过动画。如果你没有答案,你知道一个可以引导我的质量教程。

注意:我正在使用PyQt。

1 个答案:

答案 0 :(得分:3)

我认为您可以使用动画窗口小部件几何属性的QPropertyAnimation来获得所需内容。 但恕我直言,这是窗口管理者的角色,可以做你想做的事。也许你会有一些麻烦绕过它(但我可能错了)。

在更好地阅读您的问题之后,您似乎想要使用自己的组件来触发隐藏/显示,以便WM不应该成为问题。

首先,这里有一些代码可以最小化窗口小部件(假设tbw是要设置动画的窗口小部件的实例):

formerGeometry = QtCore.QRect(tbw.geometry()) # storing previous geometry in order to be able to restore it later

hideAnimation = QtCore.QPropertyAnimation(tbw, "geometry")
hideAnimation.setDuration(2000) # chose the value that fits you
hideAnimation.setStartValue(formerGeometry)
#computing final geometry
endTopLeftCorner = QtCore.QPoint(tbw.pos() + QtCore.QPoint(0, tbw.height()))
finalGeometry = QtCore.QRect(endTopLeftCorner, QtCore.QSize(tbw.width(), 0))
hideAnimation.setEndValue(finalGeometry)

hideAnimation.start()