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将动态GIF图片倒放播放的方法
Nov 02 Python
用TensorFlow实现多类支持向量机的示例代码
Apr 28 Python
Python中关键字global和nonlocal的区别详解
Sep 03 Python
python使用matplotlib绘制热图
Nov 07 Python
python opencv 读取本地视频文件 修改ffmpeg的方法
Jan 26 Python
python列表,字典,元组简单用法示例
Jul 11 Python
详解Python可视化神器Yellowbrick使用
Nov 11 Python
python中的数组赋值与拷贝的区别详解
Nov 26 Python
python实现人机猜拳小游戏
Feb 03 Python
calendar在python3时间中常用函数举例详解
Nov 18 Python
高考要来啦!用Python爬取历年高考数据并分析
Jun 03 Python
python编程项目中线上问题排查与解决
Nov 01 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函数篇详解十进制、二进制、八进制和十六进制转换函数说明
2011/12/05 PHP
PHP超级全局变量数组小结
2012/10/04 PHP
win7安装php框架Yii的方法
2016/01/25 PHP
JavaScript监测ActiveX控件是否已经安装过的代码
2008/09/02 Javascript
jquery插件如何使用 jQuery操作Cookie插件使用介绍
2012/12/15 Javascript
jQuery实现多按钮单击变色
2014/11/27 Javascript
JavaScript中window.showModalDialog()用法详解
2014/12/18 Javascript
JQuery显示隐藏页面元素的方法总结
2015/04/16 Javascript
javascript委托(Delegate)blur和focus用法实例分析
2015/05/26 Javascript
基于Vue.js实现数字拼图游戏
2016/08/02 Javascript
jQuery-mobile事件监听与用法详解
2016/11/23 Javascript
bootstrap日历插件datetimepicker使用方法
2016/12/14 Javascript
Vue 2.x教程之基础API
2017/03/06 Javascript
vue实现组件之间传值功能示例
2018/07/13 Javascript
jquery获取img的src值实例介绍
2019/01/16 jQuery
layui文件上传控件带更改后数据传值的方法
2019/09/23 Javascript
基于canvas实现手写签名(vue)
2020/05/21 Javascript
python实现文本文件合并
2015/12/29 Python
python利用拉链法实现字典方法示例
2017/03/25 Python
Python2.7实现多进程下开发多线程示例
2019/05/31 Python
Django自定义列表 models字段显示方式
2020/04/03 Python
python处理写入数据代码讲解
2020/10/22 Python
Selenium环境变量配置(火狐浏览器)及验证实现
2020/12/07 Python
html5手机端页面可以向右滑动导致样式受影响的问题
2018/06/20 HTML / CSS
特罗佩亚包官方网站:Tropea
2017/01/03 全球购物
历史专业毕业生的自我鉴定
2013/11/15 职场文书
劳动工资科岗位职责范本
2014/03/02 职场文书
警察群众路线整改措施
2014/09/26 职场文书
2014年保险公司工作总结
2014/11/22 职场文书
冰峪沟导游词
2015/02/09 职场文书
小学四年级班务总结该怎么写?
2019/08/16 职场文书
​(迎国庆)作文之我爱我的祖国
2019/09/19 职场文书
Python爬取英雄联盟MSI直播间弹幕并生成词云图
2021/06/01 Python
MySQL 8.0 驱动与阿里druid版本兼容问题解决
2021/07/01 MySQL
Python 键盘事件详解
2021/11/11 Python
Html5同时支持多端sdk的小技巧
2021/11/17 HTML / CSS