实现效果如下:
关键代码:
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_())