Как менять статус у PushButton и картинку вместе с ней

У меня в кнопку добавляются две картинки:

icon = QIcon()
icon.addFile(u":/icons/icons/file_off.png", QSize(), QIcon.Normal, QIcon.Off)
icon.addFile(u":/icons/icons/file_on.png", QSize(), QIcon.Normal, QIcon.On)
self.btn_file_1.setIcon(icon)

При открытии программы отображается первая картинка, как менять картинку на вторую при нажатии кнопки?


Ответы (1 шт):

Автор решения: S. Nick

Как вариант:

import sys
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.Qt import *


class ProxyStyle(QProxyStyle):
    def drawControl(self, control, option, painter, widget):
        if control == QStyle.CE_PushButtonLabel:
            QCommonStyle.drawControl(self, control, option, painter, widget)
        else:
            super().drawControl(control, option, painter, widget)


class Test(QMainWindow):
    def __init__(self, parent=None):
        super(Test, self).__init__(parent=parent)
        self.resize(300, 400)

        icon = QIcon()
        icon.addFile("lightOn.png", state=QIcon.On)
        icon.addFile("lightOff.png", state=QIcon.Off)
        
        button = QPushButton(self)
        button.setCheckable(True)
        button.setIcon(icon)
        button.setIconSize(QSize(150, 150))
        button.setGeometry(50, 50, 200, 200)

        verString = "PyQt version: " + PYQT_VERSION_STR + "\n"
        verString += "Qt version: " + qVersion()

        label = QLabel(verString, self)
        label.setGeometry(50, 250, 200, 150)


if __name__ == "__main__":
    app = QApplication(sys.argv)
    app.setStyle(QStyleFactory.create("fusion"))
    proxy = ProxyStyle(app.style())
    app.setStyle(proxy)
    test = Test()
    test.show()
    sys.exit(app.exec_())

введите сюда описание изображения

введите сюда описание изображения

→ Ссылка