PySide 中 QIcon 上的 Painter Shape

Painter Shape over QIcon in PySide

如何将绘制的矩形附加到 QIcon。最终返回的结果必须是 qicon,因为我在需要 qicon 的控件上使用它。

之前:

之后:

import os, sys
from PySide import QtCore, QtGui


class Example(QtGui.QWidget):

    def __init__(self, *args, **kwargs):
        super(Example, self).__init__(*args, **kwargs)
        self.resize(600,400)

        self.btn = QtGui.QPushButton()
        self.btn.setFixedSize(128,128)
        icon = QtGui.QIcon('thumb.jpg')
        self.btn.setIconSize(icon.availableSizes()[0])
        self.btn.setIcon(icon)

        lay = QtGui.QVBoxLayout()
        lay.addWidget(self.btn)
        self.setLayout(lay)


def main():
    app = QtGui.QApplication(sys.argv)
    ex = Example()
    ex.show()
    sys.exit(app.exec_())


if __name__ == '__main__':
    main()

您必须将图像读取为 QPixmap,使用 QPainter 通过添加矩形修改 QPixmap,最后使用 QPixmap 创建 QIcon

import sys

from PySide import QtCore, QtGui


class Example(QtGui.QWidget):
    def __init__(self, *args, **kwargs):
        super(Example, self).__init__(*args, **kwargs)
        self.resize(600,400)

        lay = QtGui.QHBoxLayout(self)

        pixmap = QtGui.QPixmap('thumb.jpg')
        painter = QtGui.QPainter(pixmap)
        painter.fillRect(QtCore.QRect(20, 20, 40, 40), QtGui.QColor("red"))
        painter.end()

        for icon in (QtGui.QIcon('thumb.jpg'), QtGui.QIcon(pixmap)):
            btn = QtGui.QPushButton()
            btn.setFixedSize(128,128)
            btn.setIconSize(icon.availableSizes()[0])
            btn.setIcon(icon)
            lay.addWidget(btn)

def main():
    app = QtGui.QApplication(sys.argv)
    ex = Example()
    ex.show()
    sys.exit(app.exec_())


if __name__ == '__main__':
    main()