PyQt使用QPropertyAnimation开发简单动画


Posted in Python onApril 02, 2020

QPropertyAnimation是PyQt5.QtCore模块提供的动画设计类,使用该类可以针对PyQt的界面对象进行动画播放,如果要针对一个指定对象进行动画播放,包括如下步骤:

一、创建动画对象

创建时要确认需要进行动画处理的对象以及对象的变化属性,通过:
QPropertyAnimation(QObject target,QByteArray propertyName,QObject parent)来创建动画对象:

其中:
1、target为准备进行动画动作的对象,可以不填,不填时动画对象创建后要使用setTargetObject来设置动作对象;
2、propertyName为动作对象变更的属性,可以不填,不填时动画对象创建并设置动画动作的对象要使用setPropertyName来设置变更的属性;
3、parent为动作对象的父对象,可以不填,不填默认为None。

二、指定动作的初始状态

动作的初始状态就是指动作对象变更的属性的起始值,如果不设置就是对象的当前值。要设置初始值,使用:
setStartValue(属性初始值)

三、指定动作的最终状态

动作的最终状态就是指动作对象动画结束后属性的值,要设置属性最终值,使用:
setEndValue(属性最终值)

四、指定动画时长

动画时长就是从初始状态变更为最终状态的时长,要设置动画时长使用:
setDuration(time)
单位为毫秒。

五、进行动画播放

使用start()进行动画播放。

案例

要将界面上一个叫testButton的按钮的起始位置向x轴和y轴方向各挪动一10个像素,并用动画形式展现挪动过程,相关动画的代码如下:

def startAnimation(self):
    animation = QPropertyAnimation(self.testButton,b"geometry",self)
    #animation.setTargetObject(self.testButton)
    #animation.setPropertyName(b"geometry")
    startpos = self.testButton.geometry()
    newpos = QRect(startpos.x()+10,startpos.y()+10,startpos.width(),startpos.height())

    #animation.setStartValue(startpos)
    animation.setEndValue(newpos)
    animation.setDuration(1000)
    animation.start()

注意调用方法中的属性名是二进制字符串,因此加"b",而看了网上很多案例属性前都没有加"b",但在PyQt5.13版本中无法正常执行,其他版本老猿不能确认。

关于QPropertyAnimation类更多的内容大家可以参考《pyqt5中动画的使用》。

到此这篇关于PyQt使用QPropertyAnimation开发简单动画的文章就介绍到这了,更多相关PyQt QPropertyAnimation动画内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python下使用Psyco模块优化运行速度
Apr 05 Python
使用Protocol Buffers的C语言拓展提速Python程序的示例
Apr 16 Python
Python中MySQL数据迁移到MongoDB脚本的方法
Apr 28 Python
读写json中文ASCII乱码问题的解决方法
Nov 05 Python
Python Pandas找到缺失值的位置方法
Apr 12 Python
为什么从Python 3.6开始字典有序并效率更高
Jul 15 Python
pytorch自定义初始化权重的方法
Aug 17 Python
Python循环实现n的全排列功能
Sep 16 Python
python利用faker库批量生成测试数据
Oct 15 Python
Django自带用户认证系统使用方法解析
Nov 12 Python
python for循环赋值问题
Jun 03 Python
Django+Celery实现定时任务的示例
Jun 23 Python
python topk()函数求最大和最小值实例
Apr 02 #Python
python使用梯度下降和牛顿法寻找Rosenbrock函数最小值实例
Apr 02 #Python
Python如何通过百度翻译API实现翻译功能
Apr 02 #Python
Python基于百度AI实现OCR文字识别
Apr 02 #Python
python 穷举指定长度的密码例子
Apr 02 #Python
python3安装OCR识别库tesserocr过程图解
Apr 02 #Python
python简单的三元一次方程求解实例
Apr 02 #Python
You might like
PHP中实现进程间通讯
2006/10/09 PHP
解决PHP里大量数据循环时内存耗尽的方法
2015/10/10 PHP
学习php设计模式 php实现门面模式(Facade)
2015/12/07 PHP
Laravel框架控制器的request与response用法示例
2019/09/30 PHP
基于jquery的button默认enter事件(回车事件)。
2011/05/18 Javascript
后台获取ZTREE选中节点的方法
2015/02/12 Javascript
JS实现模拟风力的雪花飘落效果
2015/05/13 Javascript
简介可以自动完成UI的AngularJS工具angular-smarty
2015/06/23 Javascript
javascript获取网页宽高方法汇总
2015/07/19 Javascript
javascript实现表单验证
2016/01/29 Javascript
JS实现响应鼠标点击动画渐变弹出层效果代码
2016/03/25 Javascript
jQuery的 $.ajax防止重复提交的两种方法(推荐)
2016/10/14 Javascript
Javascript中toFixed计算错误(依赖银行家舍入法的缺陷)解决方法
2017/08/22 Javascript
详解处理Vue单页面应用SEO的另一种思路
2018/11/09 Javascript
nodejs log4js 使用详解
2019/05/31 NodeJs
微信自定义分享链接信息(标题,图片和内容)实现过程详解
2019/09/04 Javascript
ES6中Promise的使用方法实例总结
2020/02/18 Javascript
JS XMLHttpRequest原理与使用方法深入详解
2020/04/30 Javascript
vue实现桌面向网页拖动文件的示例代码(可显示图片/音频/视频)
2021/03/01 Vue.js
[03:24]DOTA2超级联赛专访hao 大翻盘就是逆袭
2013/05/24 DOTA
python错误处理详解
2014/09/28 Python
利用Python如何生成hash值示例详解
2017/12/20 Python
Python2.7下安装Scrapy框架步骤教程
2017/12/22 Python
Python计算一个给定时间点前一个月和后一个月第一天的方法
2018/05/29 Python
python3 requests库文件上传与下载实现详解
2019/08/22 Python
Python列表倒序输出及其效率详解
2020/03/04 Python
keras 如何保存最佳的训练模型
2020/05/25 Python
Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals()? 它们有何区别?用contains来区分是否有重复的对象。还是都不用
2013/07/30 面试题
What's the difference between deep copy and shallow copy? (深拷贝与浅拷贝有什么区别)
2015/11/10 面试题
应聘面试自我评价
2014/01/24 职场文书
公司年会搞笑主持词
2014/03/24 职场文书
幼儿园师德师风学习材料
2014/05/29 职场文书
酒店七夕情人节活动策划方案
2014/08/24 职场文书
公司授权委托书
2014/10/17 职场文书
vue实现无缝轮播效果(跑马灯)
2021/05/14 Vue.js
青岛市的收音机研制与生产
2022/04/07 无线电