| 23 | class Label(QLabel): |
| 24 | |
| 25 | def __init__(self, *args, antialiasing=True, **kwargs): |
| 26 | super(Label, self).__init__(*args, **kwargs) |
| 27 | self.Antialiasing = antialiasing |
| 28 | self.setMaximumSize(200, 200) |
| 29 | self.setMinimumSize(200, 200) |
| 30 | self.radius = 100 |
| 31 | |
| 32 | #####################核心实现######################### |
| 33 | self.target = QPixmap(self.size()) # 大小和控件一样 |
| 34 | self.target.fill(Qt.transparent) # 填充背景为透明 |
| 35 | |
| 36 | p = QPixmap("Data/Images/head.jpg").scaled( # 加载图片并缩放和控件一样大 |
| 37 | 200, 200, Qt.KeepAspectRatioByExpanding, Qt.SmoothTransformation) |
| 38 | |
| 39 | painter = QPainter(self.target) |
| 40 | if self.Antialiasing: |
| 41 | # 抗锯齿 |
| 42 | painter.setRenderHint(QPainter.Antialiasing, True) |
| 43 | painter.setRenderHint(QPainter.HighQualityAntialiasing, True) |
| 44 | painter.setRenderHint(QPainter.SmoothPixmapTransform, True) |
| 45 | |
| 46 | # painter.setPen(# 测试圆圈 |
| 47 | # QPen(Qt.red, 5, Qt.SolidLine, Qt.RoundCap, Qt.RoundJoin)) |
| 48 | path = QPainterPath() |
| 49 | path.addRoundedRect( |
| 50 | 0, 0, self.width(), self.height(), self.radius, self.radius) |
| 51 | # **** 切割为圆形 ****# |
| 52 | painter.setClipPath(path) |
| 53 | # painter.drawPath(path) # 测试圆圈 |
| 54 | |
| 55 | painter.drawPixmap(0, 0, p) |
| 56 | self.setPixmap(self.target) |
| 57 | #####################核心实现######################### |
| 58 | |
| 59 | |
| 60 | class Window(QWidget): |