Python PyQt5 Label 圆形

Python PyQt5 Label 圆形

Python PyQt5 Label 圆形

1. 概述

在使用Python的GUI库PyQt5开发图形界面时,常常需要在界面上显示标签(Label),以展示文字、图标等内容。本文将介绍如何使用PyQt5中的QLabel类创建一个圆形的标签,并给出相应的示例代码。

2. 示例代码

import sys
from PyQt5.QtWidgets import QApplication, QWidget, QLabel
from PyQt5.QtGui import QPainter, QColor, QFont, QIcon
from PyQt5.QtCore import Qt

class CircularLabel(QLabel):
    def __init__(self, parent):
        super().__init__(parent)

        # 设置标签的圆形样式
        self.setStyleSheet("border-radius: 25px; background-color: blue;")
        self.setAlignment(Qt.AlignCenter)
        self.setText("Circular Label")
        self.setFont(QFont("Arial", 12, QFont.Bold))

    def paintEvent(self, event):
        painter = QPainter(self)
        painter.setRenderHint(QPainter.Antialiasing)

        painter.setBrush(QColor(255, 255, 255, 100))
        painter.setPen(Qt.NoPen)
        painter.drawEllipse(5, 5, self.width() - 10, self.height() - 10)

        super().paintEvent(event)


if __name__ == '__main__':
    app = QApplication(sys.argv)

    # 创建一个窗口
    window = QWidget()
    window.setGeometry(100, 100, 300, 200)
    window.setWindowTitle("Circular Label Example")

    # 创建一个圆形标签
    circular_label = CircularLabel(window)
    circular_label.setGeometry(50, 50, 200, 100)

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

3. 代码解析

3.1 引入必要的模块

import sys
from PyQt5.QtWidgets import QApplication, QWidget, QLabel
from PyQt5.QtGui import QPainter, QColor, QFont, QIcon
from PyQt5.QtCore import Qt

首先,我们需要引入一些PyQt5的模块来进行图形界面的开发。sys模块用于处理命令行参数,QApplicationQWidget用于创建应用程序和窗口对象,QLabel用于创建标签对象,QPainter用于在标签上进行绘图,QColor用于设置颜色,QFont用于设置字体,QIcon用于设置图标,Qt用于指定一些常用的常量。

3.2 创建一个自定义的圆形标签类

class CircularLabel(QLabel):
    def __init__(self, parent):
        super().__init__(parent)

        # 设置标签的圆形样式
        self.setStyleSheet("border-radius: 25px; background-color: blue;")
        self.setAlignment(Qt.AlignCenter)
        self.setText("Circular Label")
        self.setFont(QFont("Arial", 12, QFont.Bold))

    def paintEvent(self, event):
        painter = QPainter(self)
        painter.setRenderHint(QPainter.Antialiasing)

        painter.setBrush(QColor(255, 255, 255, 100))
        painter.setPen(Qt.NoPen)
        painter.drawEllipse(5, 5, self.width() - 10, self.height() - 10)

        super().paintEvent(event)

我们创建了一个名为CircularLabel的继承自QLabel的类,用于实现圆形标签的功能。在类的初始化方法__init__中,我们使用setStyleSheet方法设置了标签的样式。其中,border-radius: 25px;表示将标签的边框样式为圆角,background-color: blue;表示将标签的背景色设置为蓝色。我们使用setAlignment方法将标签中的文本居中显示,并使用setText方法设置了标签的文本内容为”Circular Label”,使用setFont方法设置了标签中文本的字体样式。

在继承自QLabel的类中,我们重写了父类的paintEvent方法。在该方法中,我们使用QPainter绘图对象对标签进行绘制。首先,我们使用setRenderHint方法设置了抗锯齿渲染,以优化标签的显示效果。然后,我们使用setBrush方法设置了QColor(255, 255, 255, 100)作为画刷的颜色,表示在标签内部绘制一个白色、半透明(透明度为100)的圆形。使用setPen方法设置了画笔为无色,即不绘制圆形的边框。最后,我们使用drawEllipse方法在标签上绘制了一个圆形,其圆心为(5, 5),半径为self.width() - 10self.height() - 10。这样,我们就在圆形标签上绘制了一个白色的圆形。

3.3 创建应用程序和窗口对象

if __name__ == '__main__':
    app = QApplication(sys.argv)

    # 创建一个窗口
    window = QWidget()
    window.setGeometry(100, 100, 300, 200)
    window.setWindowTitle("Circular Label Example")

    # 创建一个圆形标签
    circular_label = CircularLabel(window)
    circular_label.setGeometry(50, 50, 200, 100)

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

在主程序中,我们创建了一个QApplication对象app,并使用sys.argv作为参数初始化该对象。

然后,我们创建了一个QWidget对象window,用于作为主窗口。使用setGeometry方法设置了窗口的位置和大小,(100, 100)为窗口左上角坐标,300为窗口宽度,200为窗口高度。使用setWindowTitle方法设置了窗口标题为”Circular Label Example”。

最后,我们创建了一个CircularLabel对象circular_label,作为圆形标签。使用setGeometry方法设置了标签的位置和大小,(50, 50)为标签左上角坐标,200为标签宽度,100为标签高度。

最后,我们使用show方法显示窗口,并使用sys.exit(app.exec_())进入主循环,等待应用程序退出。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程