python GUI库图形界面开发之PyQt5不规则窗口实现与显示GIF动画的详细方法与实例

作者:jia666666 时间:2023-09-20 17:59:32 

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窗口知识请查看下面的相关链接

来源:https://blog.csdn.net/jia666666/article/details/81875126

标签:python,PyQt5,窗口,GIF
0
投稿

猜你喜欢

  • python tensorflow基于cnn实现手写数字识别

    2023-05-09 06:22:06
  • 驯服不听话的网页表格

    2007-12-03 11:36:00
  • Redis中3种特殊的数据类型(BitMap、Geo和HyperLogLog)

    2024-01-24 11:20:47
  • python贪婪匹配以及多行匹配的实例讲解

    2021-12-27 20:01:04
  • 利用django+wechat-python-sdk 创建微信服务器接入的方法

    2023-06-04 21:28:55
  • PHP导出数据超时的优化建议

    2023-06-29 18:36:32
  • python sklearn包——混淆矩阵、分类报告等自动生成方式

    2022-05-29 12:19:27
  • Node.js多进程的方法与参数实例说明

    2024-05-02 17:37:37
  • golang中sync.Map并发创建、读取问题实战记录

    2023-07-16 12:23:27
  • ASP 隐藏下载地址及防盗链代码

    2011-02-26 11:17:00
  • 解决python 文本过滤和清理问题

    2023-08-31 08:18:38
  • python 查找文件名包含指定字符串的方法

    2021-05-03 08:54:21
  • python基本数据类型练习题

    2022-07-21 14:26:26
  • Go语言基础学习教程

    2024-02-06 07:12:11
  • 详解MySQL中的死锁情况以及对死锁的处理方法

    2024-01-20 05:33:33
  • MySQL优化之如何查找SQL效率低的原因

    2024-01-12 21:03:55
  • Python迭代器和生成器定义与用法示例

    2022-02-15 19:42:13
  • Python import导入上级目录文件的方法

    2022-11-16 01:27:41
  • php生成随机数/生成随机字符串的方法小结【5种方法】

    2023-09-05 20:23:21
  • Javascript this 关键字 详解

    2024-06-07 15:51:18
  • asp之家 网络编程 m.aspxhome.com