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与Redis的连接教程
Apr 22 Python
python利用装饰器进行运算的实例分析
Aug 04 Python
python通过elixir包操作mysql数据库实例代码
Jan 31 Python
利用Python实现Shp格式向GeoJSON的转换方法
Jul 09 Python
Python3内置模块random随机方法小结
Jul 13 Python
Python中生成一个指定长度的随机字符串实现示例
Nov 06 Python
python 回溯法模板详解
Feb 26 Python
python中round函数如何使用
Jun 19 Python
Python 获取异常(Exception)信息的几种方法
Dec 29 Python
python源码剖析之PyObject详解
May 18 Python
Python实现DBSCAN聚类算法并样例测试
Jun 22 Python
Python matplotlib可视化之绘制韦恩图
Feb 24 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得到mssql的存储过程的输出参数功能实现
2012/11/23 PHP
以文件形式缓存php变量的方法
2015/06/26 PHP
PHP的Yii框架的常用日志操作总结
2015/12/08 PHP
jquery 插件 人性化的消息显示
2008/01/21 Javascript
JavaScript XML实现两级级联下拉列表
2008/11/10 Javascript
jquery下异步提交表单 异步跨域提交表单
2010/11/17 Javascript
浏览器解析js生成的html出现样式问题的解决方法
2012/04/16 Javascript
js实现文本框输入文字个数限制代码
2015/12/25 Javascript
常见的javascript跨域通信方法
2015/12/31 Javascript
jquery实现ajax加载超时提示的方法
2016/07/23 Javascript
JavaScript数据结构之二叉树的计数算法示例
2017/04/13 Javascript
React.js中常用的ES6写法总结(推荐)
2017/05/09 Javascript
AngularJS实现的获取焦点及失去焦点时的表单验证功能示例
2017/10/25 Javascript
react中使用swiper的具体方法
2018/05/15 Javascript
使用javascript做在线算法编程
2018/05/25 Javascript
webpack file-loader和url-loader的区别
2019/01/15 Javascript
[01:32]DOTA2次级联赛——首支职业女子战队选拔赛全记录
2014/10/23 DOTA
[44:09]DOTA2上海特级锦标赛A组小组赛#1 EHOME VS MVP.Phx第二局
2016/02/25 DOTA
python实现监控windows服务并自动启动服务示例
2014/04/17 Python
Python的Django框架可适配的各种数据库介绍
2015/07/15 Python
浅谈python类属性的访问、设置和删除方法
2016/07/25 Python
Python如何快速上手? 快速掌握一门新语言的方法
2017/11/14 Python
Python sklearn库实现PCA教程(以鸢尾花分类为例)
2020/02/24 Python
Python处理PDF与CDF实例
2020/02/26 Python
pycharm专业版远程登录服务器的详细教程
2020/09/15 Python
为您搜罗全球潮流時尚品牌:HBX
2019/12/04 全球购物
Ajax的优点和缺点
2014/11/21 面试题
军校制空专业毕业生自我鉴定
2013/11/16 职场文书
党的群众路线教育实践活动督导组工作情况汇报
2014/10/28 职场文书
2014年学校总务处工作总结
2014/12/08 职场文书
青年文明号汇报材料
2014/12/23 职场文书
写给老师的保证书
2015/05/09 职场文书
金砖之国观后感
2015/06/11 职场文书
黑白记忆观后感
2015/06/18 职场文书
PHP遍历数组的6种方式总结
2021/11/17 PHP
zabbix如何添加监控主机和自定义监控项
2022/08/14 Servers