效果图:
用来做弹窗提醒,气泡弹窗会自动关闭,持续时间1600ms,在750ms时开始逐渐透明,1600ms时消失
窗口继承的是QDialog
设置背景透明、无标题栏、无边框,窗口的Qss:
QDialog {
background: transparent;
}
UI (自动生成的代码 Ui_tips.py
)
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_Dialog(object):
def setupUi(self, Dialog):
Dialog.setObjectName("Dialog")
Dialog.resize(150, 54)
Dialog.setStyleSheet("background: transparent;")
self.pushButton = QtWidgets.QPushButton(Dialog)
self.pushButton.setGeometry(QtCore.QRect(0, 0, 151, 51))
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Fixed)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.pushButton.sizePolicy().hasHeightForWidth())
self.pushButton.setSizePolicy(sizePolicy)
font = QtGui.QFont()
font.setFamily("Microsoft YaHei UI")
font.setPointSize(10)
font.setBold(True)
font.setWeight(75)
self.pushButton.setFont(font)
self.pushButton.setFocusPolicy(QtCore.Qt.NoFocus)
self.pushButton.setContextMenuPolicy(QtCore.Qt.NoContextMenu)
self.pushButton.setAutoFillBackground(False)
self.pushButton.setStyleSheet("background-color:rgb(250, 255, 213);\n"
"border-style:none;\n"
"padding:8px;\n"
"border-radius:25px;")
self.pushButton.setObjectName("pushButton")
self.retranslateUi(Dialog)
QtCore.QMetaObject.connectSlotsByName(Dialog)
def retranslateUi(self, Dialog):
_translate = QtCore.QCoreApplication.translate
Dialog.setWindowTitle(_translate("Dialog", "Dialog"))
self.pushButton.setText(_translate("Dialog", "提示框"))
继承QDialog
的TipUi
类:
from Ui_tips import Ui_Dialog
from PyQt5.QtWidgets import QWidget, QApplication, QDialog
from PyQt5.QtCore import Qt, QTimer, QRect
import sys
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):
super().__init__(parent)
self.ui = Ui_Dialog()
self.ui.setupUi(self)
self.timer = QTimer()
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
self.timer.timeout.connect(self.hide_windows)
self.timer.start(25)
def hide_windows(self):
self.timer.start(25)
if self.windosAlpha <= 30:
self.setWindowOpacity(1.0)
else:
self.setWindowOpacity(1.882 - 0.0294 * self.windosAlpha)
self.windosAlpha += 1
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()
if __name__ == '__main__':
app = QApplication(sys.argv)
TipUi.show_tip('复制成功')
sys.exit(app.exec_())
其它属性诸如气泡颜色、位置、显示时间、透明度变化可以根据情况修改
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)