插件窝 干货文章 PyQt5 QLabel字体渐变如何实现?

PyQt5 QLabel字体渐变如何实现?

渐变 self QPainter QLinearGradient 712    来源:    2025-03-15

在 PyQt5 中,QLabel 的字体渐变效果可以通过使用 QLinearGradientQPainter 来实现。具体步骤如下:

  1. 创建一个自定义的 QLabel:继承自 QLabel,并重写 paintEvent 方法。
  2. 使用 QLinearGradient 创建渐变:在 paintEvent 中,使用 QLinearGradient 创建一个渐变对象,并设置渐变的颜色和方向。
  3. 使用 QPainter 绘制文本:在 paintEvent 中,使用 QPainter 绘制文本,并将渐变应用到文本上。

以下是一个完整的示例代码:

import sys
from PyQt5.QtWidgets import QApplication, QLabel, QWidget, QVBoxLayout
from PyQt5.QtGui import QLinearGradient, QPainter, QColor
from PyQt5.QtCore import Qt

class GradientLabel(QLabel):
    def __init__(self, text, parent=None):
        super(GradientLabel, self).__init__(parent)
        self.setText(text)
        self.setAlignment(Qt.AlignCenter)

    def paintEvent(self, event):
        # 创建渐变对象
        gradient = QLinearGradient(0, 0, self.width(), self.height())
        gradient.setColorAt(0, QColor(255, 0, 0))  # 红色
        gradient.setColorAt(1, QColor(0, 0, 255))  # 蓝色

        # 创建 QPainter 对象
        painter = QPainter(self)
        painter.setRenderHint(QPainter.Antialiasing)

        # 设置渐变画笔
        pen = painter.pen()
        pen.setBrush(gradient)
        painter.setPen(pen)

        # 绘制文本
        painter.drawText(self.rect(), Qt.AlignCenter, self.text())

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

    def initUI(self):
        layout = QVBoxLayout()
        label = GradientLabel("渐变字体效果")
        layout.addWidget(label)
        self.setLayout(layout)
        self.setWindowTitle('PyQt5 QLabel 字体渐变')
        self.setGeometry(300, 300, 300, 200)

if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = MainWindow()
    window.show()
    sys.exit(app.exec_())

代码说明:

  1. GradientLabel 类:这是一个自定义的 QLabel 类,重写了 paintEvent 方法来实现渐变字体效果。
  2. QLinearGradient:用于创建一个线性渐变对象,setColorAt 方法用于设置渐变的颜色和位置。
  3. QPainter:用于绘制文本,setPen 方法将渐变应用到文本上。

运行效果:

运行上述代码后,你会看到一个窗口,其中包含一个 QLabel,其文本颜色从红色渐变到蓝色。

你可以根据需要调整渐变的颜色、方向和位置,以实现不同的渐变效果。