pyqt-todolist/view/Tip_UI.py
2022-04-30 10:00:43 +08:00

58 lines
2.1 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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()