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 requests 使用快速入门
Aug 31 Python
python编程实现12306的一个小爬虫实例
Dec 27 Python
python中numpy的矩阵、多维数组的用法
Feb 05 Python
Python键盘输入转换为列表的实例
Jun 23 Python
python 划分数据集为训练集和测试集的方法
Dec 11 Python
itchat-python搭建微信机器人(附示例)
Jun 11 Python
基于Python实现ComicReaper漫画自动爬取脚本过程解析
Nov 11 Python
python绘制随机网络图形示例
Nov 21 Python
python 实现Flask中返回图片流给前端展示
Jan 09 Python
详解Python修复遥感影像条带的两种方式
Feb 23 Python
Django设置Postgresql的操作
May 14 Python
解决Pytorch中关于model.eval的问题
May 22 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中生成随机密码的自定义函数代码
2013/10/21 PHP
php设计模式之命令模式使用示例
2014/03/02 PHP
smarty缓存用法分析
2014/12/16 PHP
PHP版本的选择5.2.17 5.3.27 5.3.28 5.4 5.5兼容性问题分析
2016/04/04 PHP
PHP实现登陆表单提交CSRF及验证码
2017/01/24 PHP
PHP编程实现计算抽奖概率算法完整实例
2017/08/09 PHP
php-msf源码详解
2017/12/25 PHP
javascript 命名规则 变量命名规则
2010/02/25 Javascript
js弹出窗口之弹出层的小例子
2013/06/17 Javascript
javascript实现锁定网页、密码解锁效果(类似系统屏幕保护效果)
2014/08/15 Javascript
jQuery内部原理和实现方式浅析
2015/02/03 Javascript
JavaScript更改字符串的大小写
2015/05/07 Javascript
jquery判断输入密码两次是否相等
2020/04/22 Javascript
require.js配合插件text.js实现最简单的单页应用程序
2016/07/12 Javascript
微信小程序 tabs选项卡效果的实现
2017/01/05 Javascript
TableSort.js表格排序插件使用方法详解
2017/02/10 Javascript
javascript checkbox/radio onchange不能兼容ie8处理办法
2017/06/13 Javascript
javascript 缓冲运动框架的实现
2017/09/29 Javascript
vue如何自动化打包测试环境和正式环境的dist/test文件
2019/06/06 Javascript
微信小程序sessionid不一致问题解决
2019/08/30 Javascript
在vue项目中利用popstate处理页面返回的操作介绍
2020/08/06 Javascript
学习python (1)
2006/10/31 Python
python制作花瓣网美女图片爬虫
2015/10/28 Python
matplotlib subplots 调整子图间矩的实例
2018/05/25 Python
python子线程退出及线程退出控制的代码
2019/10/16 Python
Tensorflow设置显存自适应,显存比例的操作
2020/02/03 Python
Pycharm debug调试时带参数过程解析
2020/02/03 Python
Python 虚拟环境工作原理解析
2020/12/24 Python
科沃斯机器人官网商城:Ecovacs
2016/08/29 全球购物
世界上最大的二手相机店:KEN
2017/05/17 全球购物
NBA欧洲商店(英国):NBA Europe Store UK
2018/07/27 全球购物
介绍一下grep命令的使用
2012/06/28 面试题
出纳岗位职责模板
2013/11/27 职场文书
销售人员获奖感言
2014/02/05 职场文书
煤矿安全生产管理协议书
2016/03/22 职场文书
一波干货,会议主持词开场白范文
2019/05/06 职场文书