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_())
进入主循环,等待应用程序退出。