1. 코드

import sys

from PyQt5.QtWidgets import QApplication, QWidget 
from PyQt5.QtGui import QPainter, QColor, QFont
from PyQt5.QtCore import Qt

class 텍스트넣기(QWidget):

    def __init__(self):
        super().__init__()
        self.UI초기화()

    def UI초기화(self):
        self.text = 'Hello Weniv World!!'
        self.setGeometry(150, 300, 250, 500)
        self.setWindowTitle('QPainter!')
        self.show()

    def paintEvent(self, event):
        paint = QPainter()
        paint.begin(self)
        self.drawText(event, paint)
        paint.end()

    def drawText(self, event, paint):
        paint.setPen(QColor(10, 10, 10))
        paint.setFont(QFont('Decorative', 10))
        paint.drawText(130, 100, 'hello world!!')
        paint.drawText(event.rect(), Qt.AlignCenter, self.text)

프로그램무한반복 = QApplication(sys.argv)
실행인스턴스 = 텍스트넣기()
프로그램무한반복.exec_()

2. 상세 내용

순서대로 따라가시다 보면 painEvent를 호출하지 않았다는 사실을 알게 되실 겁니다. 그런데 어떻게 painEvent는 호출되고 있었던 것일까요? 그 이유는 painEvent는 이미 정의되어 있는 메서드이고, 위젯은 자신을 다시 그릴 때 이 함수를 호출하기 때문입니다.

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/1513922e-f9aa-4acf-9026-9610577a3ef3/Untitled.png

widget에 Virtual functions에 가보면 이미 paintEvent가 정의되어 있는 것을 확인할 수 있습니다. 링크는 아래 있습니다.

QWidget - Qt for Python

drawText는 우리가 정의한 함수입니다. paintEvent에서 호출하고 있는 것을 볼 수 있습니다.

HTML Color Codes

QColor - Qt for Python

QFont - Qt for Python

3. 실행 화면