PyQt5技术分享_实现加载界面GIF的呈现

原文链接(本人写的啊,不算抄袭😎):PyQt5技术分享_实现加载界面GIF的呈现

需求

要实现加载界面我们的需求有:首先GIF的呈现,加载窗口的呈现,主窗口的虚化及不可操作,下面我们一一实现上面的需求。

GIF的呈现

QLabel类是Qt中一种用来呈现普通文本,HTML文本和静态图片的容器,要实现标签呈现动图需要用到QLabel.setMovie(self,QMovie)函数,其中QMovie是Qt中用来实现GIF图片动起来的容器
image-20230629125048896
下面我们用代码来说明上述过程

1
2
3
4
5
6
# 加载动画画面
self.loading_gif = QMovie('./img/loading_b.gif') # 加载动图
self.loading_label = QLabel(self) # 创建QLabel标签
self.loading_label.setMovie(self.loading_gif) # 将动图装载到标签容器里面
self.loading_gif.start() # 让动图开始动起来
# self.loading_gif.stop() # 让动图停止,一般情况下不需要停止动图,只需要关闭动图呈现的窗口界面即可

这样一个能呈现动图的QLabel就创建好了

加载窗口的呈现

我们要实现加载窗口就需要创建一个QWidget界面,而整个界面就动图一个标签,界面还需要进行透明化设置
代码实现:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# 加载动画的窗口
class Loading_Win(QWidget):
def __init__(self,mainWin):
super(Loading_Win, self).__init__()
# 获取主窗口的坐标
self.m_winX = mainWin.x()
self.m_winY = mainWin.y()
self.initUI()
def initUI(self):
# 设置窗口基础类型
self.resize(250,250) # 设置加载界面的大小
self.move(self.m_winX+340,self.m_winY+155) # 移动加载界面到主窗口的中心
self.setWindowFlags(Qt.FramelessWindowHint | Qt.Dialog | Qt.WindowStaysOnTopHint) # 设置窗口无边框|对话框|置顶模式
# 设置背景透明
self.setAttribute(Qt.WA_TranslucentBackground)
# 加载动画画面
self.loading_gif = QMovie('./img/loading_b.gif')
self.loading_label = QLabel(self)
self.loading_label.setMovie(self.loading_gif)
self.loading_gif.start()

主窗口背景虚化即不可操作

要实现主窗口不可操作就需要设置窗口的mainWindow.WindowModality属性
Qt中WindowModality属性有三种:

常量含义
Qt.NonModal窗口不是模式窗口(默认)
Qt.WindowModal窗口是单窗口层次结构模式,并阻止其父窗口及其他父窗口和组父窗口的所有兄弟窗口获得输入
Qt.ApplicationModal窗口是应用的模式窗口,阻塞所有其他应用窗口获得输入
1
2
3
self.setWindowModality(Qt.ApplicationModal)	# 设置主窗口不可操作
Loading_Gif.show() # 呈现加载界面
self.setWindowModality(Qt.NonModal) # 恢复正常模式