Qpainter

Помогите разобратся рисования в с qpainter ниже , из нутри метода paintevent вызывается метод drawtext пере
давая в метод drawtext аргуметны event и qp ,как понемаю qp передается в метод drawtext чтоб из метода drawtext иметь доступ к класу QPainter или ошибаюсь? Но я не понемаю что такое аргумент event для чего и что делает
Помогите понять

from PyQt5.QtWidgets import QWidget, QApplication
from PyQt5.QtGui import QPainter, QColor, QFont
from PyQt5.QtCore import Qt
 
class Example(QWidget):
    
    def __init__(self):
        super().__init__()
        self.initUI()
        
    def initUI(self):      
        self.text = u'\u041b\u0435\u0432 \u041d\u0438\u043a\u043e\u043b\u0430\
\u0435\u0432\u0438\u0447 \u0422\u043e\u043b\u0441\u0442\u043e\u0439: \n\
\u0410\u043d\u043d\u0430 \u041a\u0430\u0440\u0435\u043d\u0438\u043d\u0430'
        self.setGeometry(300, 300, 280, 170)
        self.setWindowTitle('Draw text')
        self.show()
        
    def paintEvent(self, event):
        qp = QPainter()
        qp.begin(self)
        self.drawText(event, qp)
        qp.end()
        
    def drawText(self, event, qp):
        qp.setPen(QColor(168, 34, 3))
        qp.setFont(QFont('Decorative', 10))
        qp.drawText(event.rect(), Qt.AlignCenter, self.text)        
                
if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())

А ты прочитай документацию на метод paintEvent, его аргументы должны быть в ней описаны. event наверное содержит описание области, которую надо отрисовать (если это только часть контрола), или координаты всего контрола (если перерисовать надо всё).

Я читал но не очень понял

А чтоб рисавать на виджете можно только переопеделив его функцию paintevent?
Переопределив функцию paint event, вместо того что рисавать геметрю виджита при изменени размеров сварачивании мы рисуем на самом виджете задав код ього что мы хотим на виджете рисовать да ?без переопределении метода виджета в унаследованном класее ,просто рисовать на поверхности виджетов не получится да?

Попробуй почитать про Graphics View Framework, вдруг тебе подойдёт? QGraphicsScene представляет собой пространство, в котором можно создавать и отображать графические элементы, такие как прямоугольники, эллипсы, линии и т.д.

    QGraphicsScene scene;

    // Создание графических элементов
    QGraphicsEllipseItem *ellipseItem = scene.addEllipse(0, 0, 100, 100);
    QGraphicsRectItem *rectItem = scene.addRect(150, 150, 100, 100);
    QGraphicsLineItem *lineItem = scene.addLine(300, 300, 400, 400);

    // Установка цвета и стиля элементов
    QPen pen(Qt::red);
    pen.setWidth(2);

    ellipseItem->setPen(pen);

    QBrush brush(Qt::blue);
    rectItem->setBrush(brush);

    lineItem->setPen(pen);
    ...

QGraphicsScene это поверхность для рисавания как понемаю без соднания подкласов виджета ,и переопределения метода paintevet ,можно прямо на неи рисавать инструментом рисования?
Как как в canvas в tkintere?
А на виджете только аыше описанным способам переопределив медод paintevent?