liading效果
使用QMovie类来加载gif格式图片,使用QLable标签来做容器呈现gif,代码如下

# -*- coding: UTF-8 -*-
'''
@Author: chenjianwen
@Date: 2020-06-03 15:15:27
@LastEditTime: 2020-06-13 11:26:45
@LastEditors: Please set LastEditors
@Description: In User Settings Edit
@FilePath: \DsafeshareClient\mask_module.py
'''
from PyQt5.Qt import *
from PyQt5 import QtWidgets, QtGui, QtCore
from PyQt5.QtWidgets import QApplication, QWidget, QLabel
from PyQt5.QtGui import QIcon, QMovie

import threading,queue
import time
import sys,signal

class M_mask(QWidget):

    def mouseMoveEvent(self, QMouseEvent):
        QMouseEvent.accept()
        
    sig_resize = pyqtSignal(int,int)    

    def __init__(self,l="",h=""):
        super(M_mask,self).__init__()
        if l == "":
            l = 640
        if h == "":
            h = 512
        self.resize(l,h)
        self.m_ui()
        self.raise_()
        self.setWindowFlag(QtCore.Qt.FramelessWindowHint)  # 隐藏边框
        self.setWindowFlags(QtCore.Qt.WindowStaysOnTopHint) #置顶

    def m_ui(self):
        self.setWindowTitle("加载gif动画")
        self.label_01()

    def label_01(self):
        self.label = QLabel(self)
        self.label.setScaledContents(True)
        self.m_movie()

    def m_movie(self):
        self.movie = QMovie("./images/dengdai.gif")
        self.label.setMovie(self.movie)
        self.movie.start()

    def resizeEvent(self, event):
        self.label.resize(self.width(),self.height())


这是一个封装好的类,在调用他的实例即可。

from mask_module import M_mask as menban
globalv.gl_menban = menban(login_pane.width(),login_pane.height())
globalv.gl_menban.show()
globalv.gl_menban.setVisible(False)
globalv.gl_menban.move(login_pane.pos())

globalv.gl_menban是一个全局的类,生存周期直到软件关闭,因为这个loading模板几乎无时无刻不在使用,在呈现的时候,使用
setVisible(True),不呈现的时候使用setVisible(False)

globalv.gl_menban.move(login_pane.pos())这一句适当有鼠标点击事件发生的时候,将移动到都某一需要的坐标

当我们需要在不同页面呈现不同的蒙版大小时,可调用resize,这时会触发resizeEvent事件,来改变蒙版的大小

globalv.gl_menban.resize(self.width()-self.leftWidget.width()-globalv.gl_leftwidget_lc,self.height())

跟随某一界面移动时,需要在某个界面的鼠标移动事件中加入如下两句:

def mouseMoveEvent(self, QMouseEvent):
        if Qt.LeftButton and self.m_flag:
            self.move(QMouseEvent.globalPos()-self.m_Position)#更改窗口位置
            QMouseEvent.accept()
            globalv.gl_menban.mouseMoveEvent(QMouseEvent)
            globalv.gl_menban.move(self.x()+self.leftWidget.width()+globalv.gl_leftwidget_lc,self.y())
            

loading都需要在其他窗口之前,所以一定要设置置顶

self.setWindowFlags(QtCore.Qt.WindowStaysOnTopHint) #置顶

隐藏边框

self.setWindowFlag(QtCore.Qt.FramelessWindowHint)  # 隐藏边框
Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐