Проблема с методом 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, но не знаю как его сделать. Помогите, пожалуйста)


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