Не отображается фон после использования 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

