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 13 Python
python 每天如何定时启动爬虫任务(实现方法分享)
May 21 Python
Python操作配置文件ini的三种方法讲解
Feb 22 Python
详解pandas.DataFrame中删除包涵特定字符串所在的行
Apr 04 Python
OpenCV-Python 摄像头实时检测人脸代码实例
Apr 30 Python
python3.6根据m3u8下载mp4视频
Jun 17 Python
3行Python代码实现图像照片抠图和换底色的方法
Oct 10 Python
python 申请内存空间,用于创建多维数组的实例
Dec 02 Python
Python日志:自定义输出字段 json格式输出方式
Apr 27 Python
Python用来做Web开发的优势有哪些
Aug 05 Python
浅谈Python实现opencv之图片色素的数值运算和逻辑运算
Jun 23 Python
如何用六步教会你使用python爬虫爬取数据
Apr 06 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 第二节 数据类型之数组
2012/04/28 PHP
ThinkPHP5.1验证码功能实现的示例代码
2020/06/08 PHP
javascript知识点收藏
2007/02/22 Javascript
基于jquery的兼容各种浏览器的iframe自适应高度的脚本
2010/08/13 Javascript
JS面向对象编程 for Cookie
2010/09/19 Javascript
jQuery把表单元素变为json对象
2013/11/06 Javascript
jquery validate 自定义验证方法介绍 日期验证
2014/02/27 Javascript
Windows系统下Node.js的简单入门教程
2015/06/23 Javascript
jQuery实现的网页右下角tab样式在线客服效果代码
2015/10/23 Javascript
jquery trigger实现联动的方法
2016/02/29 Javascript
js 弹出虚拟键盘修改密码的简单实例
2016/10/10 Javascript
jQuery表格的维护和删除操作
2017/02/03 Javascript
vue动态生成dom并且自动绑定事件
2017/04/19 Javascript
详解用Node.js写一个简单的命令行工具
2018/03/01 Javascript
微信小程序页面间值传递的两种方法
2018/11/26 Javascript
Vue文本模糊匹配功能如何实现
2020/07/30 Javascript
Vue左滑组件slider使用详解
2020/08/21 Javascript
[01:35:13]DOTA2-DPC中国联赛 正赛 DLG vs PHOENIX BO3 第一场 1月18日
2021/03/11 DOTA
Flask解决跨域的问题示例代码
2018/02/12 Python
Tensorflow实现卷积神经网络用于人脸关键点识别
2018/03/05 Python
Win7 64位下python3.6.5安装配置图文教程
2020/10/27 Python
python 定时任务去检测服务器端口是否通的实例
2019/01/26 Python
Python制作词云图代码实例
2019/09/09 Python
Keras中的两种模型:Sequential和Model用法
2020/06/27 Python
python更新数据库中某个字段的数据(方法详解)
2020/11/18 Python
mac系统下安装pycharm、永久激活、中文汉化详细教程
2020/11/24 Python
唤醒头发毛囊的秘密武器:Grow Gorgeous
2016/08/28 全球购物
美国眼镜网站:EyeBuyDirect
2017/04/13 全球购物
联想法国官方网站:Lenovo法国
2018/10/18 全球购物
美国第二大连锁药店:Rite Aid
2019/04/03 全球购物
广告设计专业自荐信范文
2013/11/14 职场文书
运动会广播稿200字
2014/01/15 职场文书
年终考核评语
2014/01/19 职场文书
园艺专业毕业生求职信
2014/09/02 职场文书
工程部岗位职责范本
2015/04/11 职场文书
js基于div丝滑实现贝塞尔曲线
2022/09/23 Javascript