58 lines
2.1 KiB
Python
58 lines
2.1 KiB
Python
from view.UI_Tips import Ui_Dialog
|
||
from PyQt5.QtWidgets import QApplication, QDialog
|
||
from PyQt5.QtCore import Qt, QTimer, QRect
|
||
|
||
|
||
# 创建静态变量的装饰器,参考 https://www.jianshu.com/p/3ed1037b7c18
|
||
def static_vars(**kwargs):
|
||
def decorate(func):
|
||
for k in kwargs:
|
||
setattr(func, k, kwargs[k])
|
||
return func
|
||
|
||
return decorate
|
||
|
||
class TipUi(QDialog):
|
||
def __init__(self, text: str, parent=None):
|
||
# 设置ui
|
||
super().__init__(parent)
|
||
self.ui = Ui_Dialog()
|
||
self.ui.setupUi(self)
|
||
# 设置定时器,用于动态调节窗口透明度
|
||
self.timer = QTimer()
|
||
# 设置气泡在屏幕上的位置,水平居中,垂直屏幕80%位置
|
||
desktop = QApplication.desktop()
|
||
self.setGeometry(QRect(int(desktop.width() / 2 - 75), int(desktop.height() * 0.8), 152, 50))
|
||
# 显示的文本
|
||
self.ui.pushButton.setText(text)
|
||
# 设置隐藏标题栏、无边框、隐藏任务栏图标、始终置顶
|
||
self.setWindowFlags(Qt.CustomizeWindowHint | Qt.FramelessWindowHint | Qt.Tool | Qt.WindowStaysOnTopHint)
|
||
# 设置窗口透明背景
|
||
self.setAttribute(Qt.WA_TranslucentBackground, True)
|
||
# 窗口关闭自动退出,一定要加,否则无法退出
|
||
self.setAttribute(Qt.WA_QuitOnClose, True)
|
||
# 用来计数的参数
|
||
self.windosAlpha = 0
|
||
# 设置定时器25ms,1600ms记64个数
|
||
self.timer.timeout.connect(self.hide_windows)
|
||
self.timer.start(25)
|
||
|
||
# 槽函数
|
||
def hide_windows(self):
|
||
self.timer.start(25)
|
||
# 前750ms设置透明度不变,后850ms透明度线性变化
|
||
if self.windosAlpha <= 30:
|
||
self.setWindowOpacity(1.0)
|
||
else:
|
||
self.setWindowOpacity(1.882 - 0.0294 * self.windosAlpha)
|
||
self.windosAlpha += 1
|
||
# 差不多3秒自动退出
|
||
if self.windosAlpha >= 63:
|
||
self.close()
|
||
|
||
# 静态方法创建气泡提示
|
||
# @staticmethod
|
||
@static_vars(tip=None)
|
||
def show_tip(text):
|
||
TipUi.show_tip.tip = TipUi(text)
|
||
TipUi.show_tip.tip.show()
|