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

需求

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

GIF的呈现

QLabel类是Qt中一种用来呈现普通文本,HTML文本和静态图片的容器,要实现标签呈现动图需要用到QLabel.setMovie(self,QMovie)函数,其中QMovie是Qt中用来实现GIF图片动起来的容器

下面我们用代码来说明上述过程

 # 加载动画画面
        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界面,而整个界面就动图一个标签,界面还需要进行透明化设置
代码实现:

# 加载动画的窗口
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 窗口是应用的模式窗口,阻塞所有其他应用窗口获得输入
self.setWindowModality(Qt.ApplicationModal)	# 设置主窗口不可操作
Loading_Gif.show()	# 呈现加载界面
self.setWindowModality(Qt.NonModal)	# 恢复正常模式

猜你喜欢

转载自blog.csdn.net/qq_45516773/article/details/109271698