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使用email模块对邮件进行编码和解码的实例教程
Jul 01 Python
python+mongodb数据抓取详细介绍
Oct 25 Python
Python自定义装饰器原理与用法实例分析
Jul 16 Python
Django框架之DRF 基于mixins来封装的视图详解
Jul 23 Python
python lambda表达式在sort函数中的使用详解
Aug 28 Python
Python3 集合set入门基础
Feb 10 Python
Python绘制动态水球图过程详解
Jun 03 Python
Python Flask框架实现简单加法工具过程解析
Jun 03 Python
Python模块zipfile原理及使用方法详解
Aug 04 Python
Python Matplotlib绘图基础知识代码解析
Aug 31 Python
python实现二分查找算法
Sep 18 Python
python中numpy数组与list相互转换实例方法
Jan 29 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 5.4 你必须要知道的
2013/08/07 PHP
作为程序员必知的16个最佳PHP库
2015/12/09 PHP
Thinkphp框架开发移动端接口(2)
2016/08/18 PHP
PHP上传文件及图片到七牛的方法
2018/07/25 PHP
js下用gb2312编码解码实现方法
2009/12/31 Javascript
jQuery 表格插件整理
2010/04/27 Javascript
25个优雅的jQuery Tooltip插件推荐
2011/05/25 Javascript
js正文内容高亮效果的实现方法
2013/06/30 Javascript
从数据结构的角度分析 for each in 比 for in 快的多
2013/07/07 Javascript
为开发者准备的10款最好的jQuery日历插件
2014/02/04 Javascript
js 获取input点选按钮的值的方法
2014/04/14 Javascript
JS实现的一个简单的Autocomplete自动完成例子
2014/04/16 Javascript
构造函数+原型模式构造js自定义对象(最通用)
2014/05/12 Javascript
HTML5+setCutomValidity()函数验证表单实例分享
2015/04/24 Javascript
js滚轮事件兼容性问题需要注意哪些
2016/11/15 Javascript
Vue-Router实现页面正在加载特效方法示例
2017/02/12 Javascript
vue2.0实战之基础入门(1)
2017/03/27 Javascript
微信JSAPI Ticket接口签名详解
2020/06/28 Javascript
JavaScript实现的超简单计算器功能示例
2017/12/23 Javascript
详解Webstorm 下的Angular2.0开发之路(图文)
2018/12/06 Javascript
配置eslint规范项目代码风格
2019/03/11 Javascript
JS 图片压缩原理与实现方法详解
2020/04/29 Javascript
微信小程序实现电子签名功能
2020/07/29 Javascript
详解Python中for循环是如何工作的
2017/06/30 Python
Python实现基本数据结构中栈的操作示例
2017/12/04 Python
Python实现PS图像明亮度调整效果示例
2018/01/23 Python
python3判断url链接是否为404的方法
2018/08/10 Python
对python 合并 累加两个dict的实例详解
2019/01/21 Python
Python控制键盘鼠标pynput的详细用法
2019/01/28 Python
python实现给微信指定好友定时发送消息
2019/04/29 Python
基于Python+Appium实现京东双十一自动领金币功能
2019/10/31 Python
解决python 虚拟环境删除包无法加载的问题
2020/07/13 Python
HTML5如何为形状图上颜色怎么绘制具有颜色和透明度的矩形
2014/06/23 HTML / CSS
捷克体育用品购物网站:D-sport
2017/12/28 全球购物
女方婚礼新郎答谢词
2014/01/11 职场文书
开办大学饮食联盟创业计划书
2014/01/29 职场文书