diff --git a/.settings/org.eclipse.core.resources.prefs b/.settings/org.eclipse.core.resources.prefs index 12f131c..125a828 100644 --- a/.settings/org.eclipse.core.resources.prefs +++ b/.settings/org.eclipse.core.resources.prefs @@ -36,6 +36,8 @@ encoding//QProgressBar/PercentProgressBar.py=utf-8 encoding//QProgressBar/SimpleStyle.py=utf-8 encoding//QProgressBar/WaterProgressBar.py=utf-8 encoding//QPropertyAnimation/Lib/SlidingStackedWidget.py=utf-8 +encoding//QPropertyAnimation/MenuAnimation.py=utf-8 +encoding//QPropertyAnimation/ShakeWindow.py=utf-8 encoding//QProxyStyle/Lib/TabBarStyle.py=utf-8 encoding//QProxyStyle/TabTextDirection.py=utf-8 encoding//QPushButton/BottomLineProgress.py=utf-8 diff --git a/QPropertyAnimation/README.md b/QPropertyAnimation/README.md index 058995b..f01cf88 100644 --- a/QPropertyAnimation/README.md +++ b/QPropertyAnimation/README.md @@ -5,8 +5,9 @@ - [右键菜单动画](#2、右键菜单动画) - [点阵特效](#3、点阵特效) - [页面切换/图片轮播动画](#4、页面切换/图片轮播动画) + - [窗口抖动](#5、窗口抖动) -# 1、窗口淡入淡出 +## 1、窗口淡入淡出 [运行 FadeInOut.py](FadeInOut.py) 1. 使用`QPropertyAnimation`对窗口的`windowOpacity`透明度属性进行修改 @@ -19,7 +20,7 @@ ![FadeInOut](ScreenShot/FadeInOut.gif) -# 2、右键菜单动画 +## 2、右键菜单动画 [运行 MenuAnimation.py](MenuAnimation.py) 1. 使用`QPropertyAnimation`对菜单控件的`geometry`属性进行修改 @@ -116,4 +117,11 @@ def findClose(points): 1. `setCurrentIndex` 切换到指定页 1. `autoStart(msec)` 轮播模式, 默认是3000毫秒 -![PageSwitching](ScreenShot/PageSwitching.gif) \ No newline at end of file +![PageSwitching](ScreenShot/PageSwitching.gif) + +## 5、窗口抖动 +[运行 ShakeWindow.py](ShakeWindow.py) + +通过`QPropertyAnimation`对控件的pos属性进行死去活来的修改 + +![ShakeWindow](ScreenShot/ShakeWindow.gif) \ No newline at end of file diff --git a/QPropertyAnimation/ScreenShot/ShakeWindow.gif b/QPropertyAnimation/ScreenShot/ShakeWindow.gif new file mode 100644 index 0000000..3100a51 Binary files /dev/null and b/QPropertyAnimation/ScreenShot/ShakeWindow.gif differ diff --git a/QPropertyAnimation/ShakeWindow.py b/QPropertyAnimation/ShakeWindow.py new file mode 100644 index 0000000..b161ce3 --- /dev/null +++ b/QPropertyAnimation/ShakeWindow.py @@ -0,0 +1,73 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +""" +Created on 2019年5月8日 +@author: Irony +@site: https://pyqt5.com https://github.com/892768447 +@email: 892768447@qq.com +@file: ShakeWindow +@description: 抖动动画 +""" +from PyQt5.QtCore import QPropertyAnimation, QPoint +from PyQt5.QtWidgets import QWidget, QVBoxLayout, QPushButton + + +__Author__ = 'Irony' +__Copyright__ = 'Copyright (c) 2019 Irony' +__Version__ = 1.0 + + +class Window(QWidget): + + def __init__(self, *args, **kwargs): + super(Window, self).__init__(*args, **kwargs) + self.resize(400, 400) + layout = QVBoxLayout(self) + layout.addWidget(QPushButton('抖动', self, clicked=self.doShake)) + + def doShake(self): + self.doShakeWindow(self) + + # 下面这个方法可以做成这样的封装给任何控件 + def doShakeWindow(self, target): + """窗口抖动动画 + :param target: 目标控件 + """ + if hasattr(target, '_shake_animation'): + # 如果已经有该对象则跳过 + return + + animation = QPropertyAnimation(target, b'pos', target) + target._shake_animation = animation + animation.finished.connect(lambda: delattr(target, '_shake_animation')) + + pos = target.pos() + x, y = pos.x(), pos.y() + + animation.setDuration(200) + animation.setLoopCount(2) + animation.setKeyValueAt(0, QPoint(x, y)) + animation.setKeyValueAt(0.09, QPoint(x + 2, y - 2)) + animation.setKeyValueAt(0.18, QPoint(x + 4, y - 4)) + animation.setKeyValueAt(0.27, QPoint(x + 2, y - 6)) + animation.setKeyValueAt(0.36, QPoint(x + 0, y - 8)) + animation.setKeyValueAt(0.45, QPoint(x - 2, y - 10)) + animation.setKeyValueAt(0.54, QPoint(x - 4, y - 8)) + animation.setKeyValueAt(0.63, QPoint(x - 6, y - 6)) + animation.setKeyValueAt(0.72, QPoint(x - 8, y - 4)) + animation.setKeyValueAt(0.81, QPoint(x - 6, y - 2)) + animation.setKeyValueAt(0.90, QPoint(x - 4, y - 0)) + animation.setKeyValueAt(0.99, QPoint(x - 2, y + 2)) + animation.setEndValue(QPoint(x, y)) + + animation.start(animation.DeleteWhenStopped) + + +if __name__ == '__main__': + import sys + from PyQt5.QtWidgets import QApplication + app = QApplication(sys.argv) + w = Window() + w.show() + sys.exit(app.exec_()) diff --git a/README.md b/README.md index 3f1b993..08bd3ea 100644 --- a/README.md +++ b/README.md @@ -145,6 +145,7 @@ https://pyqt5.com 社区是专门针对PyQt5学习和提升开设的博客网站 - [右键菜单动画](QPropertyAnimation/MenuAnimation.py) - [点阵特效](QPropertyAnimation/RlatticeEffect.py) - [页面切换/图片轮播动画](QPropertyAnimation/PageSwitching.py) + - [窗口抖动](QPropertyAnimation/ShakeWindow.py) - [折叠动画](Test/partner_625781186/2.折叠控件) - Others