入坑pyqt也有半年了,由于人们对事物的审美,静态界面已经不能满足用户,而动画却给人眼前一亮,so,今天来学习pyqt的动画了

由于资料真的是太少,本人也是有啃外国佬的英文进行摸索学习,可能也是触及皮毛,以前全是我的学习笔记以及分析

基础知识就不在这里赘述了,这里直接上干货,下面是使用QPropertyAnimation一个对label大小进行改变的动画:

这里大致介绍一下QPropertyAnimation的方法

QPropertyAnimation methods

The following table shows a few important QPropertyAnimation methods:

Name Description
start()

开始动画

stop() 停止动画
setStartValue() 设定动画初始值
setEndValue() 设定动画结束值
setDuration() 设置动画的时间,单位ms
setKeyValueAt() 创建一个关键帧
setLoopCount() 设置动画重复次数

下面是py3代码

#!/usr/bin/python3
# -*- coding: utf-8 -*- """
PyQt5 Animation tutorial This program animates the size of a
widget with QPropertyAnimation. Author: Seshigure 401219180@qq.com
Last edited: 2018.03.02
""" from PyQt5.QtWidgets import QWidget, QApplication, QLabel, QPushButton
from PyQt5.QtGui import *
from PyQt5.QtCore import * class Example(QWidget):
def __init__(self):
super(Example, self).__init__()
self.initUI() def initUI(self):
self.button = QPushButton("Start", self)
self.button.clicked.connect(self.doAnim)
self.button.move(30, 30) self.label = QLabel("changeSize", self)
self.label.setAutoFillBackground(True) # 必写,不然调色板不能填充背景
self.palette = QPalette() # 创建一个调色板进行背景填充方便看label大小
self.palette.setColor(self.label.backgroundRole(), QColor(255, 50, 50, 50))
self.label.setPalette(self.palette)
self.label.setGeometry(150, 30, 100, 100) self.setGeometry(300, 300, 380, 300)
self.setWindowTitle('Animation')
self.show() def doAnim(self):
self.anim = QPropertyAnimation(self.label, b"geometry")
self.anim.setDuration(3000)
self.anim.setStartValue(QRect(150, 30, 100, 100)) # 大小100*100
self.anim.setEndValue(QRect(150, 30, 200, 200)) # 大小200*200
self.anim.start() if __name__ == "__main__":
app = QApplication([])
ex = Example()
ex.show()
app.exec_()

界面预览图如下:

备注:

1、这里使用了一个调色板对label背景进行填充,方便观察
self.label.setAutoFillBackground(True) # 必写,不然调色板不能填充背景
self.palette = QPalette()
self.palette.setColor(self.label.backgroundRole(), QColor(255, 50, 50, 50))
self.label.setPalette(self.palette)
2、其中使用 self.anim = QPropertyAnimation(self.label, b"geometry")创建了一个动画,()里面第一个是动画的对象,第二个是动画的属性(这里的属性为geometry)
3、通过设置初始值与结束值来改变label的大小
self.anim.setStartValue(QRect(150, 30, 100, 100)) # 大小100*100
self.anim.setEndValue(QRect(150, 30, 200, 200)) # 大小200*200
 

pyqt5 动画学习(一) 改变控件大小的更多相关文章

  1. C# 在运行中拖拽,改变控件大小位置类(转载)

    原文地址:https://blog.csdn.net/zgke/article/details/3718989 copy的code /// <summary> /// 移动改变控件大小 / ...

  2. C++ MFC 改变控件大小和位置

    用CWnd类的函数MoveWindow()或SetWindowPos()可以改变控件的大小和位置. void MoveWindow(int x,int y,int nWidth,int nHeight ...

  3. Android之动态改变控件大小

    利用getLayoutParams()方法和setLayoutParams()方法.三步曲:1.首先利用getLayoutParams()方法,获取控件的LayoutParams.eg:LayoutP ...

  4. C#移动及改变控件大小

    //代码比较简单,就不多解析了. #region 移动窗体保存数据 Point mouseOff;//鼠标移动位置变量 bool leftFlag; //标志是否为左键 bool largeFlag; ...

  5. java实现控件的移动及使用鼠标改变控件大小

    package cn.com.test; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Component; ...

  6. C:\\MFC控件大小随窗体大小而改变

    一.大小和位置都改变 1.首先为窗体类添加CRect m_rect,该成员变量用来记录窗体的当前大小. 2.在类向导里面(Ctrl+W),为窗体添加消息WM_SIZE的响应函数OnSize(): 注意 ...

  7. BCGcontrolBar(五) 对话框大小改变控件自动适应

    改变控件大小 首先在 构造函数中加入 EnableLayout(); 在OnInitDialog()函数中加入 CBCGPStaticLayout* pLayout = (CBCGPStaticLay ...

  8. android 动态改变控件位置和大小 .

    动态改变控件位置的方法: setPadding()的方法更改布局位置. 如我要把Imageview下移200px:             ImageView.setPadding( ImageVie ...

  9. MFC 改变控件的大小和位置

    mfc 改变控件大小和位置用到的函数: ) void MoveWindow(int x, int y, int nWidth, int nHeight); ) void MoveWindow(LPCR ...

随机推荐

  1. 用Python满足满足自己的“小虚荣”

    首先声明,学习这个只是为了好玩,只是为了好玩,并不是想用这个弄虚作假,做一些不好的事情!一心想做技术人,自制自治! 我们有时候发布一篇日志,或者是一篇博文,总希望自己的浏览量能高点,这样看起来也倍有面 ...

  2. NOIP2012 提高组 Day 2

    http://www.cogs.pro/cogs/page/page.php?aid=16 期望得分:100+100+0=0 实际得分:100+20+0=120 T2线段树标记下传出错 T1 同余方程 ...

  3. 从PRISM开始学WPF(三)Prism-Region?

    从PRISM开始学WPF(一)WPF? 从PRISM开始学WPF(二)Prism? 从PRISM开始学WPF(三)Prism-Region? 从PRISM开始学WPF(四)Prism-Module? ...

  4. 遍历JSON

    第一种: each,不做详细说明,太常用了 第二种:我用来遍历单个组,实现前端界面绑定 for(var item in person){ alert("person中"+item+ ...

  5. JavaScript-Jquery实现全选反选

    html: <dl> <dt><input type="checkbox" id="checkAll" /><labe ...

  6. hadoop大数据技术架构详解

    大数据的时代已经来了,信息的爆炸式增长使得越来越多的行业面临这大量数据需要存储和分析的挑战.Hadoop作为一个开源的分布式并行处理平台,以其高拓展.高效率.高可靠等优点越来越受到欢迎.这同时也带动了 ...

  7. angular2 学习笔记 ( server-side rendering, angular universal, 服务端渲染 )

    更新 : 2018-01-10  大半年过去了依然没有做 server side render 的冲动,但是一直有关注这方便的做法. 今天领悟了一些道理, 这里做个记入. server side re ...

  8. Jetty入门(1-2)eclipse集成jetty插件并发布运行应用

    一.eclipse集成jetty插件 1.从市场安装jetty插件 2.使用jetty插件发布应用和配置运行环境 debug配置默认共用上述run配置 3.使用jetty插件启动运行和停止运行选中的应 ...

  9. Flow简易教程——安装篇

    .mydoc_h1{ margin: 0 0 1em; } .mydoc_h1_a{ color: #2c3e50; text-decoration: none; font-size: 2em; } ...

  10. jprofiler配置

    cataline.sh JAVA_OPTS="$JAVA_OPTS -agentlib:jprofilerti=port=8849"JAVA_OPTS="$JAVA_OP ...