相关文章推荐
粗眉毛的柑橘  ·  模型微调与数据标注问题 · ...·  11 月前    · 
想表白的沙滩裤  ·  Migrating the XML ...·  11 月前    · 
重感情的草稿本  ·  南阳市新野县明德双语学校|新野县明德双语学校 ...·  1 年前    · 
爱旅游的斑马  ·  臺北市政府政風處-新聞稿-廉能楷模新典範 ...·  1 年前    · 
挂过科的机器猫  ·  openlayers(ol.Feature ...·  1 年前    · 
Code  ›  PyQt实现loading遮罩层开发者社区
tip pyqt label 遮罩层
https://cloud.tencent.com/developer/article/1613692
仗义的手术刀
3 年前
作者头像
渔父歌
0 篇文章

PyQt实现loading遮罩层

前往专栏
腾讯云
开发者社区
文档 意见反馈 控制台
首页
学习
活动
专区
工具
TVP
文章/答案/技术大牛
发布
首页
学习
活动
专区
工具
TVP
返回腾讯云官网
社区首页 > 专栏 > 数据结构笔记 > PyQt实现loading遮罩层

PyQt实现loading遮罩层

作者头像
渔父歌
发布 于 2020-04-14 14:31:50
2.4K 0
发布 于 2020-04-14 14:31:50
举报

优点: 1、完美覆盖整个窗口,阻止点击事件 2、不会阻塞窗口 3、窗口拖动时自动跟随 4、可以使用 gif动图,也可以使用文字 5、使用简单,开包即用

#-*- coding: utf-8 -*
__author__ = 'geebos'
from PyQt5.Qt import *
class LoadingMask(QMainWindow):
    def __init__(self, parent, gif=None, tip=None):
        super(LoadingMask, self).__init__(parent)
        parent.installEventFilter(self)
        self.label = QLabel()
        if not tip is None:
            self.label.setText(tip)
            font = QFont('Microsoft YaHei', 10, QFont.Normal)
            font_metrics = QFontMetrics(font)
            self.label.setFont(font)
            self.label.setFixedSize(font_metrics.width(tip, len(tip))+10, font_metrics.height()+5)
            self.label.setAlignment(Qt.AlignCenter)
            self.label.setStyleSheet(
                'QLabel{background-color: rgba(0,0,0,70%);border-radius: 4px; color: white; padding: 5px;}')
        if not gif is None:
            self.movie = QMovie(gif)
            self.label.setMovie(self.movie)
            self.label.setFixedSize(QSize(160, 160))
            self.label.setScaledContents(True)
            self.movie.start()
        layout = QHBoxLayout()
        widget = QWidget()
        widget.setLayout(layout)
        layout.addWidget(self.label)
        self.setCentralWidget(widget)
        self.setWindowOpacity(0.8)
        self.setWindowFlags(Qt.FramelessWindowHint | Qt.Dialog)
        self.hide()
    def eventFilter(self, widget, event):
        if widget == self.parent() and type(event) == QMoveEvent:
            self.moveWithParent()
            return True
        return super(LoadingMask, self).eventFilter(widget, event)
    def moveWithParent(self):
        if self.isVisible():
            self.move(self.parent().geometry().x(), self.parent().geometry().y())
            self.setFixedSize(QSize(self.parent().geometry().width(), self.parent().geometry().height()))
    @staticmethod
    def showToast(window, tip='加载中...', duration=500):
        mask = LoadingMask(window, tip=tip)
        mask.show()
        # 一段时间后移除组件
        QTimer().singleShot(duration, lambda :mask.deleteLater())
if __name__ == '__main__':
    import sys
    from PyQt5.QtWidgets import QApplication
    app = QApplication(sys.argv)
    widget = QWidget()
    widget.setFixedSize(500, 500)
    widget.setStyleSheet('QWidget{background-color:white;}')
    button = QPushButton('button')
    layout = QHBoxLayout()
    layout.addWidget(button)
    widget.setLayout(layout)
 
推荐文章
粗眉毛的柑橘  ·  模型微调与数据标注问题 · PaddlePaddle/PaddleOCR · Discussion #14536 · GitHub
11 月前
想表白的沙滩裤  ·  Migrating the XML Module | MuleSoft Documentation
11 月前
重感情的草稿本  ·  南阳市新野县明德双语学校|新野县明德双语学校教育新闻|怎么样 - 南阳中小学生教育网
1 年前
爱旅游的斑马  ·  臺北市政府政風處-新聞稿-廉能楷模新典範 拒受餽贈勇揭弊
1 年前
挂过科的机器猫  ·  openlayers(ol.Feature + ol.style)设置图标-CSDN博客
1 年前
今天看啥   ·   Py中国   ·   codingpro   ·   小百科   ·   link之家   ·   卧龙AI搜索
删除内容请联系邮箱 2879853325@qq.com
Code - 代码工具平台
© 2024 ~ 沪ICP备11025650号