【问题标题】:Qlabel with image in round shape带有圆形图像的 Qlabel
【发布时间】:2018-11-21 23:04:36
【问题描述】:

我想在 QT/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")

我得到了以下输出。

我想要如下所示的 Qlabel。

【问题讨论】:

    标签: python qt pyqt5 pyside pyside2


    【解决方案1】:

    用户头像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_())
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-24
      • 1970-01-01
      • 1970-01-01
      • 2014-05-09
      • 2019-11-08
      • 1970-01-01
      相关资源
      最近更新 更多