有些应用场景在于希望将鼠标放置在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()