Проблема с методом paintEvent в PyQt5
Мне нужно, чтобы в окне отрисовывался ну, допустим, квадрат, но только после нажатия кнопки:
self.ui.buttonDraw.clicked.connect(lambda: draw.draw(self))
Прочитал, что нужно работать с методом paintEvent, но он почему-то запускается вместе с запуском программы, и я решил сделать так:
import error
from PyQt5 import QtCore, QtGui, QtWidgets
def draw(self):
D = int(self.ui.inputBigDiameter.value())
d1 = int(self.ui.inputTopSmallDiameter.value())
d2 = int(self.ui.inputBottomSmallDiameter.value())
h = int(self.ui.inputHeight.value())
if (D != 0) and (d1 != 0 and d1 < D) and (d2 != 0 and d2 < D) and (h != 0):
qp = QtGui.QPainter()
qp.begin(self)
color = QtGui.QColor(0, 0, 0)
color.setNamedColor("#b4b4b4")
qp.setPen(color)
qp.setBrush(QtGui.QColor(200, 50, 40))
qp.drawRect(50, 50, D, h)
else:
error.show(self)
qp.end()
С переменными всё хорошо, программа не валится, но и не рисует. Запустил дебаг и прочитал такое сообщение:
QWidget::paintEngine: Should no longer be called
QPainter::begin: Paint device returned engine == 0, type: 1
QPainter::setPen: Painter not active
QPainter::setBrush: Painter not active
QPainter::drawRects: Painter not active
Понимаю, что нужно какое-то событие event, но не знаю как его сделать. Помогите, пожалуйста)