python GUI库图形界面开发之PyQt5不规则窗口实现与显示GIF动画的详细方法与实例


Posted in Python onMarch 09, 2020

PyQt5不规则窗口实现动画效果实例

import sys
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
class ShapeWidget(QWidget):
  def __init__(self,parent=None):
    super(ShapeWidget, self).__init__(parent)
    self.i=1
    self.mypix()
    self.timer=QTimer()
    self.timer.setInterval(500)
    self.timer.timeout.connect(self.timeChanged)
    self.timer.start()
  #显示不规则图片
  def mypix(self):
    self.update()
    if self.i==5:
      self.i=1
    self.mypic={1:'./images/left.png',2:'./images/up.png',3:'./images/right.png',4:'./images/down.png'}
    self.pix=QPixmap(self.mypic[self.i],'0',Qt.AvoidDither|Qt.ThresholdAlphaDither|Qt.ThresholdDither)
    self.resize(self.pix.size())
    self.setMask(self.pix.mask())
    self.dragPosition=None
  def mousePressEvent(self, QMouseEvent):
    if QMouseEvent.button()==Qt.LeftButton:
      self.m_drag=True
      self.m_DragPosition=QMouseEvent.globalPos()-self.pos()
      QMouseEvent.accept()
      self.setCursor(QCursor(Qt.OpenHandCursor))
  def mouseMoveEvent(self, QMouseEvent):
    if Qt.LeftButton and self.m_drag:
      self.move(QMouseEvent.globalPos()-self.m_DragPosition)
      QMouseEvent.accept()
  def mouseReleaseEvent(self, QMouseEvent):
    self.m_drag=False
    self.setCursor(QCursor(Qt.ArrowCursor))
  def paintEvent(self, QPaintEvent):
    painter=QPainter(self)
    painter.drawPixmap(0,0,self.pix.width(),self.pix.height(),self.pix)
  def mouseDoubleClickEvent(self, QMouseEvent):
    if QMouseEvent.button()==1:
      self.i+=1
      self.mypix()
  def timeChanged(self):
    self.i+=1
    self.mypix()
if __name__ == '__main__':
  app=QApplication(sys.argv)
  form=ShapeWidget()
  form.show()
  sys.exit(app.exec_())

运行程序,效果如下

python GUI库图形界面开发之PyQt5不规则窗口实现与显示GIF动画的详细方法与实例python GUI库图形界面开发之PyQt5不规则窗口实现与显示GIF动画的详细方法与实例python GUI库图形界面开发之PyQt5不规则窗口实现与显示GIF动画的详细方法与实例

代码分析

运行这个例子,会弹出一个窗口,显示不同方向的箭头,每0.5秒改变一次方向

pixmap.setMask()函数的作用是为调用它的控件增加一个遮罩,遮住所选区域以外的地方,使控件看起来是透明的,它的参数是一个QBitmap对象或一个QRegion对象

本例中调用QPixmap实例的self.pix.mask()函数获得图片自身的遮罩,这个遮罩是一个QBitmap对象

 self.pix=QPixmap(self.mypic[self.i],'0',Qt.AvoidDither|Qt.ThresholdAlphaDither|Qt.ThresholdDither)

        self.resize(self.pix.size())

        self.setMask(self.pix.mask())

paintEvent()函数每次初始化窗口时只调用一次,所以没加载一次图片就要重新调用一次paintEvent()函数,即在更新窗口时调用这个函数,更新窗口的核心代码如下

        self.timer=QTimer()

        self.timer.setInterval(500)

        self.timer.timeout.connect(self.timeChanged)

        self.timer.start()

当定时器的时间到期后更新窗口代码

self.update

PyQt5加载GIF动画实例

import sys
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
class LoadingGifWin(QWidget):
  def __init__(self,parent=None):
    super(LoadingGifWin, self).__init__(parent)
    #实例化标签到窗口中
    self.label=QLabel('',self)
    #设置标签的宽度与高度
    self.setFixedSize(128,128)
    #设置无边框
    self.setWindowFlags(Qt.Dialog | Qt.CustomizeWindowHint)
    self.movie=QMovie('./images/loading.gif')
    self.label.setMovie(self.movie)
    self.movie.start()
if __name__ == '__main__':
  app=QApplication(sys.argv)
  load=LoadingGifWin()
  load.show()
  sys.exit(app.exec_())

运行效果

python GUI库图形界面开发之PyQt5不规则窗口实现与显示GIF动画的详细方法与实例

本文主要讲解了PyQt5实现窗口动画的两种方法,推荐第2种PyQt5加载显示GIF动画方法,想了解更多关于PyQt5窗口知识请查看下面的相关链接

Python 相关文章推荐
python基础教程之实现石头剪刀布游戏示例
Feb 11 Python
Python中文件遍历的两种方法
Jun 16 Python
Python入门篇之正则表达式
Oct 20 Python
Python中实现的RC4算法
Feb 14 Python
python实现折半查找和归并排序算法
Apr 14 Python
Python3.5局部变量与全局变量作用域实例分析
Apr 30 Python
Puppeteer使用示例详解
Jun 20 Python
python 进程 进程池 进程间通信实现解析
Aug 23 Python
python实现一个函数版的名片管理系统过程解析
Aug 27 Python
Django操作session 的方法
Mar 09 Python
k-means 聚类算法与Python实现代码
Jun 01 Python
Python实现位图分割的效果
Nov 20 Python
python框架Django实战商城项目之工程搭建过程图文详解
Mar 09 #Python
python GUI库图形界面开发之PyQt5简单绘图板实例与代码分析
Mar 08 #Python
python GUI库图形界面开发之PyQt5信号与槽事件处理机制详细介绍与实例解析
Mar 08 #Python
python GUI库图形界面开发之PyQt5信号与槽多窗口数据传递详细使用方法与实例
Mar 08 #Python
python GUI库图形界面开发之PyQt5多线程中信号与槽的详细使用方法与实例
Mar 08 #Python
python GUI库图形界面开发之PyQt5结合Qt Designer创建信号与槽的详细方法与实例
Mar 08 #Python
python输出第n个默尼森数的实现示例
Mar 08 #Python
You might like
PHP安装问题
2006/10/09 PHP
PHP原生模板引擎 最简单的模板引擎
2012/04/25 PHP
PHP函数preg_match_all正则表达式的基本使用详细解析
2013/08/31 PHP
PHP实现简单汉字验证码
2015/07/28 PHP
详解PHP的Yii框架中扩展的安装与使用
2016/04/01 PHP
JavaScript 核心参考教程 内置对象
2009/10/13 Javascript
在javascript将NodeList作为Array数组处理的方法
2010/07/09 Javascript
原来Jquery.load的方法可以一直load下去
2011/03/28 Javascript
javascript表单验证 - Parsley.js使用和配置
2013/01/25 Javascript
js判断输入是否为数字的具体实例
2013/08/03 Javascript
自己用jQuery写了一个图片的马赛克消失效果
2014/05/04 Javascript
javascript与css3动画结合使用小结
2015/03/11 Javascript
JavaScript使用Replace进行字符串替换的方法
2015/04/14 Javascript
高效利用Angular中内置服务$http、$location等
2016/03/22 Javascript
详解springmvc 接收json对象的两种方式
2016/12/06 Javascript
原生JS实现圆环拖拽效果
2017/04/07 Javascript
Vue.js基础指令实例讲解(各种数据绑定、表单渲染大总结)
2017/07/03 Javascript
vue2+el-menu实现路由跳转及当前项的设置方法实例
2017/11/07 Javascript
浅谈Python用QQ邮箱发送邮件时授权码的问题
2018/01/29 Python
python特性语法之遍历、公共方法、引用
2018/08/08 Python
Python XML转Json之XML2Dict的使用方法
2019/01/15 Python
python 获取毫秒数,计算调用时长的方法
2019/02/20 Python
Python中新式类与经典类的区别详析
2019/07/10 Python
解决python有时候import不了当前的包问题
2019/08/28 Python
django实现支付宝支付实例讲解
2019/10/17 Python
Python ini文件常用操作方法解析
2020/04/26 Python
推荐技术人员一款Python开源库(造数据神器)
2020/07/08 Python
英国厨房与餐具用品为主的设计品牌:Joseph Joseph
2018/04/26 全球购物
EJB包括(SessionBean,EntityBean)说出他们的生命周期,及如何管理事务的
2015/07/24 面试题
幼儿园家长寄语
2014/04/02 职场文书
关于责任的演讲稿
2014/05/20 职场文书
2016创先争优活动党员公开承诺书
2016/03/24 职场文书
Python实现查询剪贴板自动匹配信息的思路详解
2021/07/09 Python
PHP 时间处理类Carbon
2022/05/20 PHP
Java时间工具类Date的常用处理方法
2022/05/25 Java/Android
pd.drop_duplicates删除重复行的方法实现
2022/06/16 Python