带有圆形图片的QLabel

4
我希望在PyQt5/PySide2应用程序中显示圆形图片。
以下是我尝试过的代码。
self.statusWidget = QLabel()
img = QImage(":/image.jpg").scaled(49, 49, Qt.IgnoreAspectRatio, Qt.SmoothTransformation)
self.statusWidget.setPixmap(QPixmap.fromImage(img))
self.statusWidget.setStyleSheet("border-radius:20px")

我得到了以下输出。

enter image description here

我想要如下所示的QLabel。

enter image description here

1个回答

10

用户头像QLabel

制作圆形头像的最佳方法

此方法使用setClipPath QPainter方法与QPainterPath结合裁剪图像。

import sys
from PyQt5.QtCore    import Qt
from PyQt5.QtGui     import QPixmap, QPainter, QPainterPath
from PyQt5.QtWidgets import QLabel, QWidget, QHBoxLayout, QApplication

class Label(QLabel):
    def __init__(self, *args, antialiasing=True, **kwargs):
        super(Label, self).__init__(*args, **kwargs)
        self.Antialiasing = antialiasing
        self.setMaximumSize(50, 50)
        self.setMinimumSize(50, 50)
        self.radius = 25 

        self.target = QPixmap(self.size())  
        self.target.fill(Qt.transparent)   

        p = QPixmap("E:/_Qt/img/qt-logo.png").scaled(  
            50, 50, Qt.KeepAspectRatioByExpanding, Qt.SmoothTransformation)

        painter = QPainter(self.target)
        if self.Antialiasing:
            painter.setRenderHint(QPainter.Antialiasing, True)
            painter.setRenderHint(QPainter.HighQualityAntialiasing, True)
            painter.setRenderHint(QPainter.SmoothPixmapTransform, True)

        path = QPainterPath()
        path.addRoundedRect(
            0, 0, self.width(), self.height(), self.radius, self.radius)

        painter.setClipPath(path)
        painter.drawPixmap(0, 0, p)
        self.setPixmap(self.target)

class Window(QWidget):
    def __init__(self, *args, **kwargs):
        super(Window, self).__init__(*args, **kwargs)
        layout = QHBoxLayout(self)
        layout.addWidget(Label(self))
        layout.addWidget(Label(self, antialiasing=False))  
        self.setStyleSheet("background: blue;")           

if __name__ == "__main__":
    app = QApplication(sys.argv)
    w = Window()
    w.show()
    sys.exit(app.exec_())

在此输入图片描述


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接