pyqt5-2.加載gif蒙版實現等待效果

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)  # 隱藏邊框
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章