PyQt5 – 在反悬停状态下改变标签的背景颜色

  • Post category:Python

PyQt5是基于Qt库封装的Python GUI开发框架,它提供了各种控件和模块,使得开发者可以快速构建漂亮的用户界面。本文将详细讲解如何在反悬停状态下改变标签的背景颜色的完整使用攻略。

前提条件

在开始本教程之前,请确保你已经安装好了PyQt5和相关的依赖库。如果你还没有安装,可以使用以下命令安装:

pip3 install PyQt5

改变标签的背景颜色

下面我们将演示如何在反悬停状态下改变标签的背景颜色。

示例1

首先,在代码中导入标签和QToolTip模块

import sys
from PyQt5.QtWidgets import QApplication, QWidget, QLabel
from PyQt5.QtGui import QFont
from PyQt5.QtCore import Qt, QSize
from PyQt5.QtGui import QCursor, QColor, QFontMetrics
from PyQt5.QtWidgets import QSizePolicy, QVBoxLayout, QHBoxLayout
from PyQt5.QtWidgets import QPushButton, QToolTip

创建一个基本的窗口,并设置窗口的标题,大小和背景颜色

app = QApplication(sys.argv)

window = QWidget()
window.setWindowTitle('Change Label Background Color')
window.setGeometry(500, 300, 400, 200)
window.setStyleSheet('background-color: #f7f7f7;')

创建一个标签,设置标签的文本和字体大小,并将标签添加到窗口中

label = QLabel('Hello, PyQt5!')
font = QFont('Arial', 20)
label.setFont(font)

layout = QVBoxLayout()
layout.addWidget(label)

window.setLayout(layout)

我们可以使用QToolTip工具来显示一个提示框。下面的示例演示了如何使用QToolTip设置标签的背景颜色

def toggle_color():
    if button.isChecked():
        label.setStyleSheet('background-color: #65D2E9;')
        QToolTip.setFont(QFont('Arial', 14, QFont.Bold))
        QToolTip.setStyleSheet('background-color: #333333; color: white')
        QToolTip.showText(QCursor.pos(), 'Label Color Changed', label)
    else:
        label.setStyleSheet('background-color: #f7f7f7;')

我们创建了一个名为”toggle_color”的函数。当选中按钮后,该函数将设置标签的背景颜色并显示一个提示框。否则,它将恢复到默认的背景颜色

最后,我们向窗口中添加一个按钮,并将其关联到”toggle_color”函数

button = QPushButton('Color Toggle')
button.setStyleSheet('background-color: #e7e7e7; border-style: outset; border-width: 2px; border-radius: 10px; border-color: beige; font: bold 14px; min-width: 10em; padding: 6px;')
button.setCheckable(True)
button.toggled.connect(toggle_color)

layout.addWidget(button)

最终,我们可以调用”app.exec_()”函数来启动应用程序,并显示窗口

window.show()
sys.exit(app.exec_())

完整示例代码如下:

import sys
from PyQt5.QtWidgets import QApplication, QWidget, QLabel
from PyQt5.QtGui import QFont
from PyQt5.QtCore import Qt, QSize
from PyQt5.QtGui import QCursor, QColor, QFontMetrics
from PyQt5.QtWidgets import QSizePolicy, QVBoxLayout, QHBoxLayout
from PyQt5.QtWidgets import QPushButton, QToolTip

app = QApplication(sys.argv)

window = QWidget()
window.setWindowTitle('Change Label Background Color')
window.setGeometry(500, 300, 400, 200)
window.setStyleSheet('background-color: #f7f7f7;')

label = QLabel('Hello, PyQt5!')
font = QFont('Arial', 20)
label.setFont(font)

layout = QVBoxLayout()
layout.addWidget(label)

def toggle_color():
    if button.isChecked():
        label.setStyleSheet('background-color: #65D2E9;')
        QToolTip.setFont(QFont('Arial', 14, QFont.Bold))
        QToolTip.setStyleSheet('background-color: #333333; color: white')
        QToolTip.showText(QCursor.pos(), 'Label Color Changed', label)
    else:
        label.setStyleSheet('background-color: #f7f7f7;')

button = QPushButton('Color Toggle')
button.setStyleSheet('background-color: #e7e7e7; border-style: outset; border-width: 2px; border-radius: 10px; border-color: beige; font: bold 14px; min-width: 10em; padding: 6px;')
button.setCheckable(True)
button.toggled.connect(toggle_color)

layout.addWidget(button)

window.setLayout(layout)

window.show()
sys.exit(app.exec_())

示例2

下面是另一个改变标签背景颜色的示例。在这个示例中,我们使用鼠标事件来改变标签的背景颜色。

我们创建一个名为”MouseLabel”的自定义标签类,并在该类中定义鼠标进入和离开事件

class MouseLabel(QLabel):
    def __init__(self, text, parent=None):
        super(MouseLabel, self).__init__(text, parent)
        self.setStyleSheet('background-color: #f7f7f7;')
        self.setFont(QFont('Arial', 20))
        self.setMinimumSize(QSize(100, 30))
        self.setAlignment(Qt.AlignCenter)

    def enterEvent(self, event):
        self.setStyleSheet('background-color: #65D2E9;')

    def leaveEvent(self, event):
        self.setStyleSheet('background-color: #f7f7f7;')

我们创建了一个名为”MouseLabel”的类,并继承自QLabel类。我们在该类中重写进入和离开事件,以更改标签的背景颜色。

然后,我们在主函数中创建窗口和布局,并向布局中添加两个标签

window = QWidget()
window.setWindowTitle('Change Label Background Color')
window.setGeometry(500, 300, 400, 200)
window.setStyleSheet('background-color: #f7f7f7;')

layout = QHBoxLayout()
label1 = MouseLabel('Label 1')
label2 = MouseLabel('Label 2')
layout.addWidget(label1)
layout.addWidget(label2)

window.setLayout(layout)
window.show()

sys.exit(app.exec_())

完整示例代码如下:

import sys
from PyQt5.QtWidgets import QApplication, QWidget, QLabel, QHBoxLayout
from PyQt5.QtGui import QFont, QPalette
from PyQt5.QtCore import Qt, QSize

class MouseLabel(QLabel):
    def __init__(self, text, parent=None):
        super(MouseLabel, self).__init__(text, parent)
        self.setStyleSheet('background-color: #f7f7f7;')
        self.setFont(QFont('Arial', 20))
        self.setMinimumSize(QSize(100, 30))
        self.setAlignment(Qt.AlignCenter)

    def enterEvent(self, event):
        self.setStyleSheet('background-color: #65D2E9;')

    def leaveEvent(self, event):
        self.setStyleSheet('background-color: #f7f7f7;')


app = QApplication(sys.argv)

window = QWidget()
window.setWindowTitle('Change Label Background Color')
window.setGeometry(500, 300, 400, 200)
window.setStyleSheet('background-color: #f7f7f7;')

layout = QHBoxLayout()
label1 = MouseLabel('Label 1')
label2 = MouseLabel('Label 2')
layout.addWidget(label1)
layout.addWidget(label2)

window.setLayout(layout)
window.show()

sys.exit(app.exec_())

总结

在本教程中,我们介绍了如何在PyQt5中改变标签的背景颜色。我们使用了两个不同的示例来演示这个过程。第一个示例使用了一个按钮和鼠标悬停事件来改变标签的背景颜色,而第二个示例则使用了自定义的标签类,并在该类中重写了鼠标进入和离开事件来改变标签的背景颜色。