59 lines
2.1 KiB
Python
59 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()
|