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

 更新时间:2020年03月09日 08:51:34   作者:jia666666  
这篇文章主要介绍了python GUI库图形界面开发之PyQt5不规则窗口与显示GIF动画的详细方法与实例,需要的朋友可以参考下

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_())

运行程序,效果如下

代码分析

运行这个例子,会弹出一个窗口,显示不同方向的箭头,每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_())

运行效果

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

相关文章

  • 使用pandas将numpy中的数组数据保存到csv文件的方法

    使用pandas将numpy中的数组数据保存到csv文件的方法

    今天小编就为大家分享一篇使用pandas将numpy中的数组数据保存到csv文件的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-06-06
  • Python的运算符重载详解

    Python的运算符重载详解

    这篇文章主要介绍了Python的运算符重载详解,文中有非常详细的代码示例,对正在学习python的小伙伴们有非常好的帮助,需要的朋友可以参考下
    2021-05-05
  • Python编程中非常重要却又被严重低估的库decorator

    Python编程中非常重要却又被严重低估的库decorator

    今天介绍的是一个已经存在十年,但是依旧不红的库 decorator,好像很少有人知道他的存在一样。本篇文章不会过多的向你介绍装饰器的基本知识,我会默认你知道什么是装饰器,并且懂得如何写一个简单的装饰器
    2021-10-10
  • Python网络爬虫之Web网页基础

    Python网络爬虫之Web网页基础

    我们在学习爬虫之前,要先了解网页的组成,只有我们了解其组成吗,才可以方能百战百胜,文章中有详细的代码示例,需要的朋友可以参考一下
    2023-04-04
  • Python抓取京东图书评论数据

    Python抓取京东图书评论数据

    最近接了个项目,需要抓取京东图书的评论,把代码放出来给大家分享下,希望能有所帮助
    2014-08-08
  • 机器深度学习二分类电影的情感问题

    机器深度学习二分类电影的情感问题

    这篇文章主要介绍了机器深度学习关于电影二次类的情感问题,代码详细,对理解深度学习中的二次类问题有很大的帮助,有需要学习的朋友可以看一下这篇文章
    2021-04-04
  • python gui开发——制作抖音无水印视频下载工具(附源码)

    python gui开发——制作抖音无水印视频下载工具(附源码)

    这篇文章主要介绍了python gui开发——制作抖音无水印视频下载工具(附源码)的相关资料,帮助大家更好的理解和学习使用python,感兴趣的朋友可以了解下
    2021-02-02
  • 如何使用五行Python代码轻松实现批量抠图

    如何使用五行Python代码轻松实现批量抠图

    简单来说,抠图就是将照片的主体人或物品从图片中抠出来,以便贴到别处使用,下面这篇文章主要给大家介绍了关于如何使用五行Python代码轻松实现批量抠图的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下
    2022-04-04
  • python调试模式无响应解决案例

    python调试模式无响应解决案例

    这篇文章主要介绍了python调试模式无响应解决案例,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-07-07
  • Python调用Prometheus监控数据并计算

    Python调用Prometheus监控数据并计算

    Prometheus是一套开源监控系统和告警为一体,由go语言(golang)开发,是监控+报警+时间序列数据库的组合。本文将介绍Python如何调用Prometheus实现数据的监控与计算,需要的可以参考一下
    2021-12-12

最新评论