如何使用pyqt4创建圆形图像?

问题描述 投票:0回答:1

我在这里编写了这段代码,但是没有用:

import sys
from PyQt4 import QtGui, QtCore

class CricleImage(QtCore.QObject):
    def __init__(self):
        super(CricleImage, self).__init__()

        self.pix = QtGui.QGraphicsPixmapItem(QtGui.QPixmap("bird(01).jpg"))

        #drawRoundCircle
        rect = self.pix.boundingRect()
        self.gri = QtGui.QGraphicsRectItem(rect)
        self.gri.setPen(QtGui.QColor('red'))


if __name__ == '__main__':

    myQApplication = QtGui.QApplication(sys.argv)

    IMG = CricleImage()
    #scene
    scene = QtGui.QGraphicsScene(0, 0, 400, 300)
    scene.addItem(IMG.pix)
    #view
    view = QtGui.QGraphicsView(scene)
    view.show()
    sys.exit(myQApplication.exec_())
python pyqt pyqt4
1个回答
0
投票
一种可能的解决方案是覆盖QGraphicsPixmapItem的paint()方法并使用setClipPath来限制绘画区域:

from PyQt4 import QtCore, QtGui class CirclePixmapItem(QtGui.QGraphicsPixmapItem): @property def radius(self): if not hasattr(self, "_radius"): self._radius = 0 return self._radius @radius.setter def radius(self, value): if value >= 0: self._radius = value self.update() def paint(self, painter, option, widget=None): painter.save() rect = QtCore.QRectF(QtCore.QPointF(), 2 * self.radius * QtCore.QSizeF(1, 1)) rect.moveCenter(self.boundingRect().center()) path = QtGui.QPainterPath() path.addEllipse(rect) painter.setClipPath(path) super().paint(painter, option, widget) painter.restore() if __name__ == "__main__": import sys app = QtGui.QApplication(sys.argv) pixmap = QtGui.QPixmap("logo.jpg") scene = QtGui.QGraphicsScene() view = QtGui.QGraphicsView(scene) view.setRenderHints( QtGui.QPainter.Antialiasing | QtGui.QPainter.SmoothPixmapTransform ) it = CirclePixmapItem(pixmap) scene.addItem(it) it.radius = pixmap.width() / 2 view.show() sys.exit(app.exec_())

© www.soinside.com 2019 - 2024. All rights reserved.