其他分享
首页 > 其他分享> > 如何显示/隐藏带有运动动画的子QWidget?

如何显示/隐藏带有运动动画的子QWidget?

作者:互联网

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

现在,我正在尝试执行相同的操作,但是在显示/隐藏下部小部件的同时具有运动动画.

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

详细信息:我希望降低下部小部件的高度,直到降低到0,然后完全隐藏.同样,当再次显示小部件时,它会缓慢增加.同时,应用程序的位置应相应更改,因此它位于屏幕底部.

我怎样才能做到这一点?我以前从未在Qt上做过动画.如果您没有答案,您是否知道可能会带我到那里的优质教程.

注意:我正在使用PyQt.

解决方法:

我认为您可以通过使用QPropertyAnimation为小部件的geometry属性设置动画来获得所需的内容.
但是恕我直言,这是窗口管理器的角色,可以完成您想要的操作.也许绕过它会有些头痛(但是我可能错了).

更好地阅读问题之后,似乎您想使用自己的组件来触发隐藏/显示,因此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()

标签:animation,pyqt,qt4,python
来源: https://codeday.me/bug/20191208/2088444.html