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编码类型转换方法详解
Jul 01 Python
Python编程对列表中字典元素进行排序的方法详解
May 26 Python
python+requests+unittest API接口测试实例(详解)
Jun 10 Python
Python全局变量与局部变量区别及用法分析
Sep 03 Python
浅谈Pycharm调用同级目录下的py脚本bug
Dec 03 Python
Python 给屏幕打印信息加上颜色的实现方法
Apr 24 Python
Django rest framework jwt的使用方法详解
Aug 08 Python
python实现根据文件格式分类
Oct 31 Python
nginx+uwsgi+django环境搭建的方法步骤
Nov 25 Python
python 将dicom图片转换成jpg图片的实例
Jan 13 Python
python线程join方法原理解析
Feb 11 Python
python利用xlsxwriter模块 操作 Excel
Oct 14 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
yii操作session实例简介
2014/07/31 PHP
PHP字符串和十六进制如何实现互相转换
2020/07/16 PHP
JavaScript 版本自动生成文章摘要
2008/07/23 Javascript
JavaScript 异步调用框架 (Part 5 - 链式实现)
2009/08/04 Javascript
animate动画示例(泪奔的小孩)及stop和delay的使用
2013/05/06 Javascript
js实现带缓冲效果的仿QQ面板折叠菜单代码
2015/09/06 Javascript
基于zepto的移动端轻量级日期插件--date_picker
2016/03/04 Javascript
javascript获取网页各种高宽及位置的方法总结
2016/07/27 Javascript
用JS中split方法实现彩色文字背景效果实例
2016/08/24 Javascript
jQuery密码强度验证控件使用详解
2017/01/05 Javascript
Angular2开发——组件规划篇
2017/03/28 Javascript
JavaScript实现图片拖曳效果
2017/09/08 Javascript
jQuery ajax读取本地json文件的实例
2017/10/31 jQuery
vue中使用localstorage来存储页面信息
2017/11/04 Javascript
ES6中数组array新增方法实例总结
2017/11/07 Javascript
vscode下的vue文件格式化问题
2018/11/28 Javascript
三分钟教你用Node做一个微信哄女友(基友)神器(面向小白)
2019/06/21 Javascript
浅析Vue 中的 render 函数
2020/02/28 Javascript
js代码实现轮播图
2020/05/04 Javascript
基于JS实现快速读取TXT文件
2020/08/25 Javascript
Vue实现随机验证码功能
2020/12/29 Vue.js
python+selenium实现登录账户后自动点击的示例
2017/12/22 Python
TensorFlow实现RNN循环神经网络
2018/02/28 Python
Python使用ctypes调用C/C++的方法
2019/01/29 Python
解决.ui文件生成的.py文件运行不出现界面的方法
2019/06/19 Python
python爬取百度贴吧前1000页内容(requests库面向对象思想实现)
2019/08/10 Python
利用jupyter网页版本进行python函数查询方式
2020/04/14 Python
联想马亚西亚官方网站:Lenovo Malaysia
2018/09/19 全球购物
葡萄牙语专业个人求职信
2013/12/10 职场文书
高三语文教学反思
2014/01/15 职场文书
元旦文艺汇演主持词
2014/03/26 职场文书
质量承诺书怎么写
2014/05/24 职场文书
大连导游词
2015/02/12 职场文书
任命书格式模板
2015/09/22 职场文书
辞职信怎么写?
2019/05/21 职场文书
教你用Python matplotlib库制作简单的动画
2021/06/11 Python