PyQt 自定义气泡弹窗

2023-05-16

效果图:

在这里插入图片描述
用来做弹窗提醒,气泡弹窗会自动关闭,持续时间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)
        # 在这里设置气泡的stylesheet
        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", "提示框"))


继承QDialogTipUi类:

from Ui_tips import Ui_Dialog
from PyQt5.QtWidgets import QWidget, QApplication, QDialog
from PyQt5.QtCore import Qt, QTimer, QRect
import sys

# 创建静态变量的装饰器,参考 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()


if __name__ == '__main__':
    app = QApplication(sys.argv)
    TipUi.show_tip('复制成功')
    sys.exit(app.exec_())

其它属性诸如气泡颜色、位置、显示时间、透明度变化可以根据情况修改

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PyQt 自定义气泡弹窗 的相关文章

  • 将 QHBoxLayout 的每个小部件对齐到顶部

    我试图将 QHBoxlayout 中的每个小部件对齐到顶部 但我得到的是每个小部件似乎都居中 我认为这是由于尺寸不同造成的 例如 from PyQt5 QtGui import from PyQt5 QtCore import from P
  • PyQt:QTableWidget获取选定的行号

    我需要获取 QTableWidget 中选定行的行号 如何获取 int 类型的数字 如何使变量随我单击的行而变化 要根据所选行更改变量 您可以连接信号QTableWidget cellClicked row column https doc
  • 如何使用表单上的按钮向 QTabWidget 添加选项卡?

    我决定为我的脚本编写视觉形式 这个想法是有一个按钮可以将新选项卡添加到 QTabWidget 它不起作用 我找不到一个好的例子 我使用PyQt5 这是我尝试过的一部分 import sys from PyQt5 QtGui import Q
  • 如何在小部件状态之间实现 QListWidget 项目的一致突出显示?

    我正在使用 PyQT 4 8 3 创建一个带有两个 QListWidget 的对话框 两者都允许多重选择 我发现 如果启用了这些 QListWidget 则仅当 QListWidget 具有焦点时 所选项目才会以蓝色突出显示 如果没有焦点
  • Qt 自定义动画按钮

    我正在尝试创建自定义动画按钮 我找到了这个页面 按钮示例 https tympanus net Development ButtonHoverStyles 我喜欢这个网站上的 3 和 19 我试过做3个 但不一样 有人能帮我吗 我的网站上第
  • Spyder + Python 3.5 - 如何调试内核死机,重新启动?

    我第一次致力于实现一个非常简单的 GUIPyQt5 其中嵌入了一个matplotlib情节和几个交互按钮 我真的不知道如何使用类 所以我犯了很多错误 即即使功能很简单 我也必须在小的更正和验证之间进行大量迭代 出于某种原因 我想调试 但是
  • 将内容添加到pyqt4滚动区域

    如何将内容添加到 pyqt4 中的滚动区域 我要自定义一个小部件吗 例如 如果我有一个数组或一个列表a 10 2 2 2 22 3 3 3 我应该如何在可滚动区域中显示变量 如果要将内容添加到滚动区域 则需要定义一个新的小部件并将其添加到滚
  • PyQt 自动调整 qlineedit 字符间距

    我有一个 qlineedit 用户在其中输入验证码 我希望能够每隔 5 个字符自动间隔这些数字 就像激活自动添加破折号的窗口时一样 例如 12345 67890 12345 67890 如果位数是固定的 最好的选择是使用setInputMa
  • 将 QStringList (PyQt) 转换为普通的 Python 列表

    我想获取 qstringlist 中的每个元素并从列表中获取原始数据 而不是 pyqt 将其存储为的任何数据 def find self self foundFileList setRowCount 0 fileName self inpu
  • 显示 python 的 XML 解析器加载大文件时的进度

    我使用 Python 内置的 XML 解析器来加载 1 5 gig XML 文件 这需要一整天的时间 from xml dom import minidom xmldoc minidom parse events xml 我需要知道如何进入
  • PyQT4 signal.connect 是否使对象保持活动状态?

    如果我有一个信号并且向该信号注册了一个对象函数 这会使该对象保持活动状态并停止该对象的垃圾收集吗 E g class Signals signal Qt pyqtSignal def init self QObject init self
  • 如何在QTextEdit中自动滚动文本(动画效果)?

    我想问一下如何让QTextEdit中的文字滚动 达到动画效果 动画效果应该类似于视频中所示的效果 https www youtube com watch v MyeuGdXv4XM https www youtube com watch v
  • 如何在辅助显示器上全屏显示图像?

    如何使用 PyQt5 PySide 或任何其他 Python 库在辅助 显示器上以全屏模式显示所需的图像 过去 我使用帧缓冲区图像查看器 Fbi https manpages ubuntu com manpages bionic man1
  • cx_freeze:QODBC 驱动程序未加载

    我的 python 应用程序如下所示 test py from PyQt4 import QtCore from PyQt4 import QtGui from PyQt4 import QtSql import sys import at
  • QTableView 中的虚拟列?

    我开始学习 Qt4 模型 视图编程 我有初学者问题 我有一个简单的应用程序 其中显示 sqlite 表QTableView class Model QtSql QSqlTableModel def init self parent None
  • 如何编辑 QProgressBar 的样式表

    我无法在我的应用程序中编辑进度条的颜色 仅编辑文本颜色 pyhton 3 9 PySide6 QT Creator 7 0 2 Python应用程序 https i stack imgur com 6hKFI png import sys
  • 如何使用 PyQt 抓取桌面截图?

    我可以使用 PyQt 从桌面或任何窗口截取屏幕截图吗 如何处理桌面上的keyPressEvent Thanks 如何截取桌面屏幕截图的示例 import sys from PyQt4 QtGui import QPixmap QApplic
  • 如何检测QTableView中的双击

    我正在使用 PyQt 创建 GUI 应用程序 在继承自 QTableView 的视图中 需要检测用户双击行时选择的行 该表可以排序 但不能编辑 我该怎么做 注意 尝试了 doubleClicked int 信号 它是由鼠标按钮发出的 而不是
  • 在 pyqt4 应用程序中记录所有异常

    使用标准 python 日志记录 api 记录 pyqt4 应用程序中的所有异常的最佳方法是什么 我尝试将 exec 包装在 try except 块中 并记录其中的异常 但它只记录应用程序初始化时的异常 作为临时解决方案 我将最重要的方法
  • setColumnStretch 和 setRowStretch 如何工作

    我有一个使用构建的应用程序PySide2它使用setColumnStretch用于柱拉伸和setRowStretch用于行拉伸 它工作得很好 但我无法理解它是如何工作的 我参考了 qt 文档 但它对我没有帮助 我被困在括号内的两个值上 例如

随机推荐