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外星人入侵游戏编程完整版
Mar 30 Python
python生成器,可迭代对象,迭代器区别和联系
Feb 04 Python
分析Python读取文件时的路径问题
Feb 11 Python
在VS Code上搭建Python开发环境的方法
Apr 06 Python
python实现windows倒计时锁屏功能
Jul 30 Python
postman传递当前时间戳实例详解
Sep 14 Python
Python2和Python3中@abstractmethod使用方法
Feb 04 Python
Keras Convolution1D与Convolution2D区别说明
May 22 Python
关于多种方式完美解决Python pip命令下载第三方库的问题
Dec 21 Python
python基于tkinter制作下班倒计时工具
Apr 28 Python
pytorch 如何使用batch训练lstm网络
May 28 Python
一篇文章弄懂Python中的内建函数
Aug 07 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 面试碰到过的问题 在此做下记录
2011/06/09 PHP
模板引擎smarty工作原理以及使用示例
2014/05/25 PHP
php中通过DirectoryIterator删除整个目录的方法
2015/03/13 PHP
驱动事件的addEvent.js代码
2007/03/27 Javascript
很全的显示阴历(农历)日期的js代码
2009/01/01 Javascript
为超链接加上disabled后的故事
2010/12/10 Javascript
JavaScript知识点整理
2015/12/09 Javascript
Jquery实现简单的轮播效果(代码管用)
2016/03/14 Javascript
使用jQuery处理AJAX请求的基础学习教程
2016/05/10 Javascript
基于jQuery实现淡入淡出效果轮播图
2020/07/31 Javascript
jquery插件bootstrapValidator数据验证详解
2016/11/09 Javascript
jQuery时间验证和转换为标准格式的时间格式
2017/03/06 Javascript
JS正则表达式验证中文字符
2017/05/08 Javascript
Vue.js自定义事件的表单输入组件方法
2018/03/08 Javascript
vue弹窗组件使用方法
2018/04/28 Javascript
vue中eslintrc.js配置最详细介绍
2018/12/21 Javascript
vue+element 模态框表格形式的可编辑表单实现
2019/06/07 Javascript
Vue filter 过滤器、以及在table中的使用介绍
2020/09/07 Javascript
[36:33]完美世界DOTA2联赛循环赛 Matador vs Forest 第一场 11.06
2020/11/06 DOTA
Python StringIO模块实现在内存缓冲区中读写数据
2015/04/08 Python
python实现同时给多个变量赋值的方法
2015/04/30 Python
基础的十进制按位运算总结与在Python中的计算示例
2016/06/28 Python
浅谈CSS3特性查询(Feature Query: @supports)功能简介
2017/07/31 HTML / CSS
大女孩胸罩:Big Girls Bras
2016/12/15 全球购物
为什么要有struct关键字
2012/05/08 面试题
毕业生找工作的自我评价
2013/10/18 职场文书
会计电算化应届生求职信
2013/11/03 职场文书
实习生自荐信范文
2013/11/13 职场文书
优秀教师获奖感言
2014/01/31 职场文书
2014党员民主评议个人思想剖析发言
2014/09/19 职场文书
2015年企业新年寄语
2014/12/08 职场文书
初中军训感想
2015/08/07 职场文书
2016应届毕业生就业指导课心得体会
2016/01/15 职场文书
导游词之云南省玉龙雪山
2019/12/19 职场文书
Python自动化之批量处理工作簿和工作表
2021/06/03 Python
Win11怎么添加用户?Win11添加用户账户的方法
2022/07/15 数码科技