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的加密模块md5、sha、crypt使用实例
Sep 28 Python
极简的Python入门指引
Apr 01 Python
pymongo给mongodb创建索引的简单实现方法
May 06 Python
win与linux系统中python requests 安装
Dec 04 Python
在Python 中实现图片加框和加字的方法
Jan 26 Python
python 获取毫秒数,计算调用时长的方法
Feb 20 Python
python3反转字符串的3种方法(小结)
Nov 07 Python
执行Python程序时模块报错问题
Mar 26 Python
解决keras backend 越跑越慢问题
Jun 18 Python
PyTorch实现重写/改写Dataset并载入Dataloader
Jul 14 Python
详解Django中 render() 函数的使用方法
Apr 22 Python
python保存图片的四个常用方法
Feb 28 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代码
2007/03/08 PHP
深入phpMyAdmin的安装与配置的详细步骤
2013/05/07 PHP
PHP中imagick函数的中文解释
2015/01/21 PHP
反射调用private方法实践(php、java)
2015/12/21 PHP
Yii中的cookie的发送和读取
2016/07/27 PHP
PHP中多线程的两个实现方法
2016/10/14 PHP
PHP-X系列教程之内置函数的使用示例
2017/10/16 PHP
比较详细的关于javascript中void(0)的具体含义解释
2007/08/02 Javascript
js CSS操作方法集合
2008/10/31 Javascript
jQuery live( type, fn ) 委派事件实现
2009/10/11 Javascript
JQuery 构建客户/服务分离的链接模型中Table中的排序分析
2010/01/22 Javascript
js中的json对象详细介绍
2014/10/29 Javascript
JavaScript实现将数组数据添加到Select下拉框的方法
2015/08/21 Javascript
bootstrap响应式表格实例详解
2017/05/15 Javascript
vue.js数据绑定操作详解
2018/04/23 Javascript
理理Vue细节(推荐)
2019/04/16 Javascript
Python装饰器使用实例:验证参数合法性
2015/06/24 Python
Python实现简单文本字符串处理的方法
2018/01/22 Python
Python中浅拷贝copy与深拷贝deepcopy的简单理解
2018/10/26 Python
python 多线程中子线程和主线程相互通信方法
2018/11/09 Python
pandas DataFrame 警告(SettingWithCopyWarning)的解决
2019/07/23 Python
Pytorch技巧:DataLoader的collate_fn参数使用详解
2020/01/08 Python
解决TensorFlow训练内存不断增长,进程被杀死问题
2020/02/05 Python
Python常用数字处理基本操作汇总
2020/09/10 Python
Python classmethod装饰器原理及用法解析
2020/10/17 Python
吉列剃须刀英国官网:Gillette英国
2019/03/28 全球购物
英语专业个人求职自荐信
2013/09/21 职场文书
个人委托书如何写
2014/09/25 职场文书
神农溪导游词
2015/02/11 职场文书
医生个人年终总结
2015/02/28 职场文书
2015年法院工作总结范文
2015/04/28 职场文书
Nginx配置并兼容HTTP实现代码解析
2021/03/31 Servers
MySQL窗口函数的具体使用
2021/11/17 MySQL
【海涛dota解说】DCG联赛第一周 LGD VS DH
2022/04/01 DOTA
Win11如何设置右键单击显示所有选项?Win11右键单击显示所有选项设置教程
2022/04/08 数码科技
Go gRPC进阶教程gRPC转换HTTP
2022/06/16 Golang