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 相关文章推荐
Flask框架Flask-Principal基本用法实例分析
Jul 23 Python
python实现Flappy Bird源码
Dec 24 Python
python 定时器,实现每天凌晨3点执行的方法
Feb 20 Python
Python面向对象程序设计之类的定义与继承简单示例
Mar 18 Python
基于python 微信小程序之获取已存在模板消息列表
Aug 05 Python
pytorch自定义二值化网络层方式
Jan 07 Python
如何基于python实现不邻接植花
May 01 Python
Python常驻任务实现接收外界参数代码解析
Jul 21 Python
pytorch学习教程之自定义数据集
Nov 10 Python
python 实现ping测试延迟的两种方法
Dec 10 Python
对Keras自带Loss Function的深入研究
May 25 Python
python 实现体质指数BMI计算
May 26 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
mac下安装nginx和php
2013/11/04 PHP
ThinkPHP实现递归无级分类――代码少
2015/07/29 PHP
DOM_window对象属性之--clipboardData对象操作代码
2011/02/03 Javascript
百度移动版的url编码解码示例
2014/04/29 Javascript
Angularjs 基础入门
2014/12/26 Javascript
检测一个函数是否是JavaScript原生函数的小技巧
2015/03/13 Javascript
基于jQuery Bar Indicator 插件实现进度条展示效果
2015/09/30 Javascript
在其他地方你学不到的jQuery小贴士和技巧(欢迎收藏)
2016/01/20 Javascript
实例讲解Jquery中隐藏hide、显示show、切换toggle的用法
2016/05/13 Javascript
JQuery遍历元素的后代和同胞实现方法
2016/09/18 Javascript
javascript轮播图算法
2016/10/21 Javascript
学习使用Bootstrap栅格系统
2017/05/11 Javascript
详解前后端分离之VueJS前端
2017/05/24 Javascript
微信小程序实现简单input正则表达式验证功能示例
2017/11/30 Javascript
深入理解requireJS-实现一个简单的模块加载器
2018/01/15 Javascript
redux-saga 初识和使用
2018/03/10 Javascript
JS实现的视频弹幕效果示例
2018/08/17 Javascript
命令行批量截图Node脚本示例代码
2019/01/25 Javascript
node.js基础知识汇总
2020/08/25 Javascript
利用Python实现网络测试的脚本分享
2017/05/26 Python
pytorch中tensor.expand()和tensor.expand_as()函数详解
2019/12/27 Python
Python中join()函数多种操作代码实例
2020/01/13 Python
python标准库os库的函数介绍
2020/02/12 Python
python matplotlib 绘图 和 dpi对应关系详解
2020/03/14 Python
python上下文管理器异常问题解决方法
2021/02/07 Python
用css3写出气球样式的示例代码
2017/09/11 HTML / CSS
出纳员岗位职责
2014/03/13 职场文书
高三毕业典礼主持词
2014/03/27 职场文书
党校个人自我鉴定范文
2014/03/28 职场文书
竞选部长演讲稿
2014/04/26 职场文书
全国税务系统先进集体事迹材料
2014/05/19 职场文书
法制演讲稿
2014/09/10 职场文书
自愿离婚协议书范本
2014/09/13 职场文书
政审证明范文
2015/06/19 职场文书
2019个人工作计划书的格式及范文!
2019/07/04 职场文书
Vue2.0搭建脚手架
2022/03/13 Vue.js