pyqt Qlabel的鼠标悬浮事件~

有些应用场景在于希望将鼠标放置在label的控件上面显示label此时的文字内容。简要解说下思路:

1)

这段代码是一个自定义的 E_Label 类,继承自 QLabel,用于创建一个能够在鼠标悬停时显示标签文本的标签控件。

  • __init__ 方法是类的构造函数,用于初始化类的实例。在这里,它调用了父类 QLabel 的构造函数,以确保正确初始化标签。

  • event 方法是事件处理函数,用于处理各种事件。在这里,它重写了父类的 event 方法。当接收到一个事件时,首先检查事件类型是否为 QEvent.ToolTip,即鼠标悬停事件。如果是鼠标悬停事件,就将标签的文本内容设置为工具提示(Tooltip)。然后通过调用 QLabel.event(self, a0) 来确保事件被适当地处理。

  • class E_Label(QLabel):
    
        def __init__(self, parent=None):
            super(E_Label, self).__init__(parent)
    
        def event(self, a0: QEvent) -> bool:
            if a0.type() == QEvent.ToolTip:
                self.setToolTip(self.text())
            return QLabel.event(self, a0)
  • 2)
  • PyQt5 应用程序中的 MainWindow 类,用于创建一个主窗口,并显示一个自定义的标签控件 E_Label,在标签控件上设置鼠标悬停时的提示信息和样式。

  • MainWindow 类继承自 QMainWindow,在初始化时调用 initUI() 方法来设置用户界面。
  • initUI() 方法中:
    • 创建了一个 E_Label 控件,并设置文本为 "鼠标放在我身上!"。
    • 设置了初始的提示信息为 "Initial tooltip"。
    • 使用样式表为标签控件设置了背景颜色、文字颜色、字体、边框、内边距和文本对齐方式。
    • 创建了一个垂直布局,并将标签控件添加到布局中。
    • 将布局设置为窗口的中心控件。
    • 设置窗口的标题为 "QLabel 鼠标悬浮事件",并设置窗口的位置和大小。
class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        self.label = E_Label("鼠标放在我身上!")
        self.label.setToolTip("Initial tooltip")  # 设置初始的提示信息

        # 设置 QLabel 的样式
        self.label.setStyleSheet("""
            QLabel {
                background-color: #f0f0f0;  # 浅灰色背景
                color: #005500;           # 深绿色文字
                font-family: 'Arial';     # 字体
                font-size: 16px;          # 字体大小
                border: 2px solid #005500;  # 深绿色边框
                padding: 8px;             # 内边距
                text-align: center;       # 文本居中
            }
        """)

        layout = QVBoxLayout()
        centralWidget = QWidget()
        centralWidget.setLayout(layout)
        layout.addWidget(self.label)

        self.setCentralWidget(centralWidget)
        self.setWindowTitle("QLabel 鼠标悬浮事件")
        self.setGeometry(300, 300, 400, 200)

代码合集:

from PyQt5.QtWidgets import QApplication, QLabel, QMainWindow, QVBoxLayout, QWidget
from PyQt5.QtCore import QEvent


class E_Label(QLabel):

    def __init__(self, parent=None):
        super(E_Label, self).__init__(parent)

    def event(self, a0: QEvent) -> bool:
        if a0.type() == QEvent.ToolTip:
            self.setToolTip(self.text())
        return QLabel.event(self, a0)


class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        self.label = E_Label("鼠标放在我身上!")
        self.label.setToolTip("Initial tooltip")  # 设置初始的提示信息

        # 设置 QLabel 的样式
        self.label.setStyleSheet("""
            QLabel {
                background-color: #f0f0f0;  # 浅灰色背景
                color: #005500;           # 深绿色文字
                font-family: 'Arial';     # 字体
                font-size: 16px;          # 字体大小
                border: 2px solid #005500;  # 深绿色边框
                padding: 8px;             # 内边距
                text-align: center;       # 文本居中
            }
        """)

        layout = QVBoxLayout()
        centralWidget = QWidget()
        centralWidget.setLayout(layout)
        layout.addWidget(self.label)

        self.setCentralWidget(centralWidget)
        self.setWindowTitle("QLabel 鼠标悬浮事件")
        self.setGeometry(300, 300, 400, 200)


def main():
    import sys
    app = QApplication(sys.argv)
    mainWindow = MainWindow()
    mainWindow.show()
    sys.exit(app.exec_())


if __name__ == '__main__':
    main()

  • 19
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值