pyqt-todolist/view/Tip_UI.py

59 lines
2.1 KiB
Python
Raw Normal View History

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
# 设置定时器25ms1600ms记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()