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

问题描述:

我正在处理有两个孩子的申请。一个用作工具栏的小部件,下面的第二个用作仪表板,信息将显示在其上。后者可以在前者上显示/隐藏按钮。 Here's a screen-cast of the prototype如何使用动画动画显示/隐藏儿童QWidget?

现在我正在看同样的动作,同时显示/隐藏较低部件。

简而言之:效果应该给人的感觉是整个应用程序在切换仪表板时上升或下降。

详细信息:我希望较低部件的高度减小,直到它减少到0,然后完全隐藏。同样,再次显示小部件时,它会缓慢增加。同时,应用程序的位置应该相应地改变,以便它停留在屏幕的底部。

我该怎么做?我从来没有在Qt上做过动画。如果你没有答案,你是否知道可以带领我的优质教程。

注意:我正在使用PyQt。

我想你可以通过使用动画处理小部件几何属性的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() 
+0

谢谢:) 1,例如在C,我无法读取,但会尝试2.如果我的动画涉及整个窗口,我可以想象WM会照顾它。但是由于动画涉及一个小部件,那么你是否仍然会这么想?如果是的话,你会如何建议这样做? (注意:目标平台是Linux)。 – Benjamin

+1

我已更新我的回答 – Jeannot

+0

非常好,谢谢。我会尽力实现这一点。我已经接受了答案 - 假设这可以正常工作:)干杯。 – Benjamin