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命令行参数sys.argv使用示例
Jan 28 Python
Python使用Flask框架同时上传多个文件的方法
Mar 21 Python
Linux下Python安装完成后使用pip命令的详细教程
Nov 22 Python
Python 实现微信防撤回功能
Apr 29 Python
使用Python中的reduce()函数求积的实例
Jun 28 Python
ansible动态Inventory主机清单配置遇到的坑
Jan 19 Python
Python django框架开发发布会签到系统(web开发)
Feb 12 Python
python如何写try语句
Jul 14 Python
Python如何定义有默认参数的函数
Aug 10 Python
python 简单的调用有道翻译
Nov 25 Python
python中reload重载实例用法
Dec 15 Python
python中uuid模块实例浅析
Dec 29 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面向对象全攻略 (十二) 抽象方法和抽象类
2009/09/30 PHP
第4章 数据处理-php字符串的处理-郑阿奇(续)
2011/07/04 PHP
PHP引用(&)各种使用方法实例详解
2014/03/20 PHP
php 与 nginx 的处理方式及nginx与php-fpm通信的两种方式
2018/09/28 PHP
Yii2框架操作数据库的方法分析【以mysql为例】
2019/05/27 PHP
PHP面向对象程序设计之对象克隆clone和魔术方法__clone()用法分析
2019/06/12 PHP
php解析非标准json、非规范json的方式实例
2020/12/10 PHP
javascript 短路法代码精简
2009/08/20 Javascript
javascript(js)的小数点乘法除法问题详解
2014/03/07 Javascript
jQuery实现的选择商品飞入文本框动画效果完整实例
2016/08/10 Javascript
jQuery  ready方法实现原理详解
2016/10/19 Javascript
bootstrap table复杂操作代码
2016/11/01 Javascript
深入理解选择框脚本[推荐]
2016/12/13 Javascript
Node.js学习之TCP/IP数据通讯(实例讲解)
2017/10/11 Javascript
微信小程序canvas实现刮刮乐效果
2018/07/09 Javascript
解决VUE项目使用Element-ui 下拉组件的验证失效问题
2020/11/07 Javascript
Python下载指定页面上图片的方法
2016/05/12 Python
python下setuptools的安装详解及No module named setuptools的解决方法
2017/07/06 Python
Python装饰器用法示例小结
2018/02/11 Python
Python-Seaborn热图绘制的实现方法
2019/07/15 Python
Python OpenCV图像指定区域裁剪的实现
2019/10/30 Python
python字符串判断密码强弱
2020/03/18 Python
django有哪些好处和优点
2020/09/01 Python
python脚本定时发送邮件
2020/12/22 Python
美国大型的健身社区和补充商店:Bodybuilding.com
2016/09/06 全球购物
Merchant 1948澳大利亚:新西兰领先的鞋类和靴子供应商
2018/03/24 全球购物
萨克斯第五大道英国:Saks Fifth Avenue英国
2019/04/01 全球购物
环境建设实施方案
2014/03/14 职场文书
货车司机岗位职责
2014/03/18 职场文书
个人简历自荐信
2014/06/26 职场文书
公共机构节能宣传周活动总结
2014/07/09 职场文书
自我检讨书怎么写
2015/05/07 职场文书
立案决定书范文
2015/06/24 职场文书
Python批量解压&压缩文件夹的示例代码
2022/04/04 Python
Tomcat 与 maven 的安装与使用教程
2022/06/16 Servers
PostgreSQL怎么创建分区表详解
2022/06/25 PostgreSQL