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模块用于处理命令行参数,QApplication和QWidget用于创建应用程序和窗口对象,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() - 10和self.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_())进入主循环,等待应用程序退出。
极客教程