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 实现自动远程登陆scp文件实例代码
Mar 13 Python
Python数据结构与算法之链表定义与用法实例详解【单链表、循环链表】
Sep 28 Python
Django项目中包含多个应用时对url的配置方法
May 30 Python
pygame游戏之旅 添加碰撞效果的方法
Nov 20 Python
Python函数和模块的使用总结
May 20 Python
python实现按行分割文件
Jul 22 Python
用Python画小女孩放风筝的示例
Nov 23 Python
pytorch之inception_v3的实现案例
Jan 06 Python
Python使用socket模块实现简单tcp通信
Aug 18 Python
Python中三维坐标空间绘制的实现
Sep 22 Python
python中time包实例详解
Feb 02 Python
python代码实现扫码关注公众号登录的实战
Nov 01 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
Laravel日志用法详解
2016/10/09 PHP
iis6+javascript Add an Extension File
2007/06/13 Javascript
javascript的trim,ltrim,rtrim自定义函数
2008/09/21 Javascript
与jquery serializeArray()一起使用的函数,主要来方便提交表单
2011/01/31 Javascript
Jquery倒数计时按钮setTimeout的实例代码
2013/07/04 Javascript
JAVASCRIPT模式窗口中下载文件无法接收iframe的流
2013/10/11 Javascript
动态的创建一个元素createElement及删除一个元素
2014/01/24 Javascript
js判断文本框剩余可输入字数的方法
2015/02/04 Javascript
JavaScript转换二进制编码为ASCII码的方法
2015/04/16 Javascript
JavaScript使用DeviceOne开发实战(三)仿微信应用
2015/12/02 Javascript
Js类的静态方法与实例方法区分及jQuery拓展的两种方法
2016/06/03 Javascript
js接收并转化Java中的数组对象的方法
2016/08/11 Javascript
js轮盘抽奖实例分析
2020/04/17 Javascript
20行JS代码实现粘贴板复制功能
2018/02/06 Javascript
Vue中使用sass实现换肤功能
2018/09/07 Javascript
JS原生带缩略图的图片切换效果
2018/10/10 Javascript
vue实现拖拽效果
2019/12/23 Javascript
详解用js代码触发dom事件的实现方案
2020/06/10 Javascript
使用next.js开发网址缩短服务的方法
2020/06/17 Javascript
如何手写简易的 Vue Router
2020/10/10 Javascript
Python常用的爬虫技巧总结
2016/03/28 Python
对python中return和print的一些理解
2017/08/18 Python
Python Selenium Cookie 绕过验证码实现登录示例代码
2018/04/10 Python
python读文件保存到字典,修改字典并写入新文件的实例
2018/04/23 Python
对python append 与浅拷贝的实例讲解
2018/05/04 Python
Sanic框架Cookies操作示例
2018/07/17 Python
python 处理telnet返回的More,以及get想要的那个参数方法
2019/02/14 Python
Python整数与Numpy数据溢出问题解决
2019/09/11 Python
Python操作注册表详细步骤介绍
2020/02/05 Python
Python 创建守护进程的示例
2020/09/29 Python
Python爬虫+tkinter界面实现历史天气查询的思路详解
2021/02/22 Python
Linden Leaves官网:新西兰纯净护肤品
2020/12/20 全球购物
linux面试题参考答案(4)
2013/01/28 面试题
创业计划书——互联网商机
2014/01/12 职场文书
广告业务员岗位职责
2015/02/13 职场文书
Django展示可视化图表的多种方式
2021/04/08 Python