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进阶教程之词典、字典、dict
Aug 29 Python
Python实现Const详解
Jan 27 Python
实例解析Python设计模式编程之桥接模式的运用
Mar 02 Python
详解Python的collections模块中的deque双端队列结构
Jul 07 Python
Python解析excel文件存入sqlite数据库的方法
Nov 15 Python
Python向Excel中插入图片的简单实现方法
Apr 24 Python
Python中的十大图像处理工具(小结)
Jun 10 Python
详解利用OpenCV提取图像中的矩形区域(PPT屏幕等)
Jul 01 Python
python如何通过闭包实现计算器的功能
Feb 22 Python
Python3.9又更新了:dict内置新功能
Feb 28 Python
安装不同版本的tensorflow与models方法实现
Feb 20 Python
python迷宫问题深度优先遍历实例
Jun 20 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/08/11 PHP
php简单实现屏蔽指定ip段用户的访问
2015/04/29 PHP
JS类库Bindows1.3中的内存释放方式分析
2007/03/08 Javascript
jquery.ui.draggable中文文档(原文翻译)
2013/11/15 Javascript
Jquery解析json数据详解
2013/12/26 Javascript
jquery使用each方法遍历json格式数据实例
2015/05/18 Javascript
再谈JavaScript线程
2015/07/10 Javascript
分享10个优化代码的CSS和JavaScript工具
2016/05/11 Javascript
jQuery UI仿淘宝搜索下拉列表功能
2017/01/10 Javascript
JS图片预加载插件详解
2017/06/21 Javascript
ES6中Array.copyWithin()函数的用法实例详解
2017/09/16 Javascript
webpack多页面开发实践
2017/12/18 Javascript
javascript少儿编程关于返回值的函数内容
2018/05/27 Javascript
jQuery实现checkbox全选、反选及删除等操作的方法详解
2019/08/02 jQuery
vue移动端模态框(可传参)的实现
2019/11/20 Javascript
JS原型对象操作实例分析
2020/06/06 Javascript
Python实现的简单万年历例子分享
2014/04/25 Python
DJANGO-ALLAUTH社交用户系统的安装配置
2014/11/18 Python
python try 异常处理(史上最全)
2019/03/07 Python
python识别图像并提取文字的实现方法
2019/06/28 Python
提升Python效率之使用循环机制代替递归函数
2019/07/23 Python
基于python实现破解滑动验证码过程解析
2020/05/28 Python
浅谈django channels 路由误导
2020/05/28 Python
深入理解HTML的FormData对象
2016/05/17 HTML / CSS
购买中国最好的电子产品:Geekbuying
2018/03/13 全球购物
JACK & JONES荷兰官网:男士服装和鞋子
2021/03/07 全球购物
优秀毕业生推荐信
2013/11/02 职场文书
文明村创建实施方案
2014/03/27 职场文书
奠基仪式策划方案
2014/05/15 职场文书
主题党日活动总结
2014/07/08 职场文书
中班教师个人总结
2015/02/05 职场文书
恋恋笔记本观后感
2015/06/16 职场文书
公司周年庆典致辞
2015/07/30 职场文书
教师素质教育心得体会
2016/01/19 职场文书
2016优秀护士求职自荐信
2016/01/28 职场文书
教你使用VS Code的MySQL扩展管理数据库的方法
2022/01/22 MySQL