用PyQt5实现一个渐隐动画的消息弹窗

实现效果如下:

无法显示图片

关键代码:

self.setWindowOpacity(opacity)  # 设置窗口透明度,值为0-1之间,1为完全不透明

全部代码:

# -*-  coding: utf-8 -*-

@author: daimashiren
@time:    2020/07/06
from time import sleep
from PyQt5.QtCore import  Qt,QRect,QPoint,QTimer
from PyQt5.QtWidgets import QDialog,QLabel,QApplication,QHBoxLayout,QDesktopWidget


class Msg(QDialog):
    def __init__(self):
        super(Msg, self).__init__()
        self.ini_ui()


    def ini_ui(self):
        self.setWindowModality(Qt.NonModal)
        self.setWindowOpacity(0.8)  # 设置窗口透明度
        self.setStyleSheet("""
                QDialog{
                border: none;
                background:rgb(150,150,150,100);}
                """)
        self.setWindowFlags(Qt.FramelessWindowHint | Qt.WindowStaysOnTopHint | Qt.Tool)
        win_center = QDesktopWidget().availableGeometry().center()
        geo = QRect(win_center.x() + 50, win_center.y() - 75, 300, 100)
        self.setGeometry(geo)
        self.setContentsMargins(0, 0, 0, 0)
        main_layout = QHBoxLayout()
        self.setLayout(main_layout)
        main_layout.setAlignment(Qt.AlignVCenter|Qt.AlignHCenter)
        self.msg_label = QLabel()
        self.msg_label.setStyleSheet("""
        QLabel{
            color:#7fccde;
            text-align:left;
            border:none;
            border-image:none;
            font-size:25px;
            font-weight:300;
            font-family: "黑体","Arial","Microsoft YaHei","宋体",sans-serif;
        }
        """)
        main_layout.addWidget(self.msg_label)

        self.fade_timer = QTimer()
        self.fade_timer.setInterval(2000)
        self.fade_timer.timeout.connect(self.faded_out)

    # (中心展示)只能在show方法后调用
    def center_show(self, offset):
        geo = self.frameGeometry()
        cp = QDesktopWidget().availableGeometry().center()  # 获取显示器分辨率,并找到中间点
        if offset:
            print("窗口偏置")
            geo.moveCenter(cp + offset)  # 将窗口中点偏置
        else:
            geo.moveCenter(cp)  # 将窗口中点放在屏幕中间
        self.move(geo.topLeft())

    def show_msg(self,text):
        self.fade_timer.start()
        self.msg_label.setText(text)
        self.msg_label.repaint()
        self.raise_()
        self.show()
        self.center_show(QPoint(75,0))
        self.exec_()  # 动画弹出
        sleep(0.5)



    def faded_out(self):
        print("窗口渐隐")
        for i in range(80,0,-1):
            opacity = i/100
            print("opacity:",opacity)
            self.setWindowOpacity(opacity)  # 设置窗口透明度
            self.repaint()
            QApplication.processEvents()
            sleep(0.05)

        self.fade_timer.stop()
        self.close()


if __name__ == "__main__":
    import sys
    app = QApplication(sys.argv)
    msg = Msg()
    msg.show_msg("测试信息...")
    sys.exit(app.exec_())

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

daimashiren

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值