Не отображается фон после использования PainterEvent

Столкнулся с затруднением: при применении paintEvent на QPushButton изображение не отображается, так же текст с кнопки пропал. Как это исправить?

Поиск меня ни к чему не привел, единственное что я нашел - для кнопки необходимо задать стиль отображения для всех состояний. Так ли это?

ps. пользуясь случаем хотел бы ещё уточнить - возможно ли рисование нескольких изображений на одном виджете?(Я прочитал что не рекомендуется иметь 2 активных рисовальщика)

main.py

from PyQt5.QtWidgets import *
from painter import *


class MainWindow(QMainWindow):   
    def __init__(self, parent=None):
        super().__init__()
        self.initUI()

    def initUI(self):
        centralwidget = QWidget(self)
        self.setCentralWidget(centralwidget)
        main_box = QGridLayout(centralwidget)
    
        consumption_btn = PushButton_tb('Consumption \n calculator')
        main_box.addWidget(consumption_btn)

if __name__ == '__main__':
    app = QApplication(sys.argv)
    mw = MainWindow()
    mw.show()
    sys.exit(app.exec_()

painter.py

class PushButton_tb(QPushButton):
    def __init__(self, parent=None):
        QPushButton.__init__(self)

    def paintEvent(self, event):
        painter = QPainter(self)
        # painter.drawPixmap(0,0,QPixmap("resources/images/assets/btn_bg/btn_chat_transparent_normal_0.png"))
        bruh = QBrush(QPixmap("resources/images/assets/btn_bg/btn_chat_transparent_normal_0.png"))
        painter.setBackground(bruh)
        painter.setBackgroundMode(Qt.OpaqueMode)
        QPushButton.paintEvent(self, event)

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

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

Попробуйте так:

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

#from my_button import PushButtonTb
class PushButtonTb(QPushButton):
    def __init__(self, *args, **kwargs):
        super(PushButtonTb, self).__init__(*args, **kwargs)
        
        self.setFixedSize(300, 100)

    def paintEvent(self, event):
        QPushButton.paintEvent(self, event)                               # !!! +++
    
        painter = QPainter(self)
        painter.setRenderHint(QPainter.Antialiasing)
        
        # установите свое изображение     vvvvvv        
        painter.drawPixmap(5, 0, QPixmap("Ok.png").scaled(100, 100))      # !!! +++

        painter.setPen(QPen(Qt.red, 5, Qt.SolidLine))
        painter.setBrush(QtGui.QBrush(QtGui.QColor(31, 176, 224)))
        painter.drawEllipse(QtCore.QRectF(225, 25, 50, 50))

#        QPushButton.paintEvent(self, event)
        

class MainWindow(QMainWindow):   
    def __init__(self, parent=None):
        super().__init__()

        centralwidget = QWidget(self)
        self.setCentralWidget(centralwidget)
        
        self.consumption_btn = PushButtonTb('Consumption \n calculator')
        
        main_box = QGridLayout(centralwidget)
        main_box.addWidget(
            self.consumption_btn,
            0, 0,            
            alignment=Qt.AlignHCenter | Qt.AlignBottom)


if __name__ == '__main__':
    import sys
    
    app = QApplication(sys.argv)
    mw = MainWindow()
    mw.resize(400, 500)
    mw.show()
    sys.exit(app.exec_())

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

Ok.png

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

→ Ссылка