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 相关文章推荐
Flask入门教程实例:搭建一个静态博客
Mar 27 Python
Python科学计算之Pandas详解
Jan 15 Python
Python图片裁剪实例代码(如头像裁剪)
Jun 21 Python
Python实现字典的遍历与排序功能示例
Dec 23 Python
Python测试人员需要掌握的知识
Feb 08 Python
python中in在list和dict中查找效率的对比分析
May 04 Python
使用Python进行体育竞技分析(预测球队成绩)
May 16 Python
python3应用windows api对后台程序窗口及桌面截图并保存的方法
Aug 27 Python
Python 解决相对路径问题:"No such file or directory"
Jun 05 Python
Python3读取和写入excel表格数据的示例代码
Jun 09 Python
Python xpath表达式如何实现数据处理
Jun 13 Python
利用Opencv实现图片的油画特效实例
Feb 28 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
Windows IIS PHP 5.2 安装与配置方法
2009/06/08 PHP
php str_pad() 将字符串填充成指定长度的字符串
2010/02/23 PHP
ThinkPHP无限级分类原理实现留言与回复功能实例
2014/10/31 PHP
PHP设计模式之建造者模式定义与用法简单示例
2018/08/13 PHP
alixixi runcode.asp的代码不错的应用
2007/08/08 Javascript
json2.js的初步学习与了解
2011/10/06 Javascript
Javascript中查找不以XX字符结尾的单词示例代码
2013/10/15 Javascript
原生的html元素选择器类似jquery选择器
2014/10/15 Javascript
常用的jQuery前端技巧收集
2014/12/24 Javascript
理解Javascript文件动态加载
2016/01/29 Javascript
浅谈jQuery中ajaxPrefilter的应用
2016/08/01 Javascript
JS中substring与substr的用法
2016/11/16 Javascript
JavaScript闭包和范围实例详解
2016/12/19 Javascript
vue绑定的点击事件阻止冒泡的实例
2018/02/08 Javascript
jQuery实现判断滚动条滚动到document底部的方法分析
2019/08/27 jQuery
vue实现学生信息管理系统
2020/05/30 Javascript
[02:58]魔廷新尊——痛苦女王至宝语音台词节选
2020/06/14 DOTA
Python验证码识别处理实例
2015/12/28 Python
python中常用的九种预处理方法分享
2016/09/11 Python
python基于pyDes库实现des加密的方法
2017/04/29 Python
Python实现PS滤镜特效之扇形变换效果示例
2018/01/26 Python
Python cookbook(数据结构与算法)让字典保持有序的方法
2018/02/18 Python
pandas筛选某列出现编码错误的解决方法
2018/11/07 Python
windows下numpy下载与安装图文教程
2019/04/02 Python
基于python实现把图片转换成素描
2019/11/13 Python
python支持多继承吗
2020/06/19 Python
Python操作Excel的学习笔记
2021/02/18 Python
酒店副总经理岗位职责范本
2014/02/04 职场文书
超市优秀员工事迹材料
2014/05/01 职场文书
导师工作推荐信范文
2014/05/17 职场文书
2014年银行员工年终自我评价
2014/09/19 职场文书
人事任命通知书
2015/04/21 职场文书
个人借条范本
2015/05/25 职场文书
《植树问题》教学反思
2016/03/03 职场文书
浅谈Redis在直播场景的实践方案
2021/04/27 Redis
漫画「狩龙人拉格纳」公开TV动画预告图
2022/03/22 日漫