PyQt개발강좌, QPainter와 QBrush를 사용한 기본 그리기

PyQt는 Python 언어를 통해 Qt 프레임워크를 사용할 수 있도록 해주는 강력한 라이브러리입니다. 이 강좌에서는 QPainter와 QBrush를 사용하여 그래픽을 그리는 기본적인 방법에 대해 배우겠습니다. GUI 애플리케이션에서 그래픽을 그리는 것은 사용자 인터페이스를 풍부하게 만들고, 시각적으로 매력적인 요소를 추가하는 중요한 부분입니다.

1. QPainter란?

QPainter는 PyQt에서 2D 그래픽을 그리기 위한 클래스로, 텍스트, 선, 도형, 이미지 등을 그릴 수 있는 기능을 제공합니다. QPainter 클래스는 QWidget 또는 QPixmap과 같은 다양한 장치에 그릴 수 있습니다. QPainter를 사용하여 복잡한 그래픽 작업을 수행할 수 있습니다.

1.1 QPainter의 기본 사용법

QPainter를 사용하기 위해서는 먼저 QPainter 객체를 생성하고, 그것을 ‘begin’ 메소드를 통해 그릴 장치에 연결해야 합니다. 그리고 ‘end’ 메소드를 호출하여 작업을 완료합니다.

2. QBrush란?

QBrush는 도형이나 텍스트 내부의 색상이나 패턴을 정의하는 데 사용됩니다. 기본적으로 단색 브러시를 사용할 수 있지만, 그라디언트, 이미지, 패턴 등의 다양한 텍스처로 설정할 수도 있습니다.

2.1 QBrush의 사용 예시

QBrush를 사용하여 다양한 방식으로 도형에 색상을 입힐 수 있으며, 이를 QPainter와 함께 사용할 수 있습니다.

3. 기본적인 그리기 예제

이제 QPainter와 QBrush를 사용하여 기본적인 도형을 그리는 간단한 예제를 살펴보겠습니다. 아래의 코드는 QWidget을 상속받아 사용자 정의 위젯을 생성하고, 그 위에 도형을 그립니다.


import sys
from PyQt5.QtWidgets import QApplication, QWidget
from PyQt5.QtGui import QPainter, QColor, QBrush

class MyWidget(QWidget):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("QPainter와 QBrush 예제")
        self.setGeometry(100, 100, 600, 400)

    def paintEvent(self, event):
        painter = QPainter(self)
        
        # 배경을 흰색으로 설정
        painter.setBrush(QBrush(QColor(255, 255, 255)))
        painter.drawRect(0, 0, self.width(), self.height())
        
        # 붉은색으로 원 그리기
        painter.setBrush(QBrush(QColor(255, 0, 0)))
        painter.drawEllipse(50, 50, 200, 200)
        
        # 파란색 사각형 그리기
        painter.setBrush(QBrush(QColor(0, 0, 255)))
        painter.drawRect(300, 50, 200, 200)
        
        # 초록색 선 그리기
        painter.setPen(QColor(0, 255, 0))
        painter.drawLine(50, 300, 550, 300)

if __name__ == "__main__":
    app = QApplication(sys.argv)
    widget = MyWidget()
    widget.show()
    sys.exit(app.exec_())

3.1 위젯 설명

  • MyWidget 클래스를 정의하여 QWidget을 상속받습니다.
  • 화면 크기와 제목을 설정하는 __init__ 메소드를 작성합니다.
  • paintEvent 메소드에서 QPainter를 초기화하고 다양한 도형을 그립니다.

4. 다양한 QBrush 스타일

QBrush는 다양한 스타일을 제공하므로, 각각의 특성에 따라 맞춤형 그래픽을 생성할 수 있습니다. 다음은 QBrush의 주요 스타일입니다.

  • SolidPattern: 단색 브러시.
  • DenseXPattern: 조밀한 패턴.
  • HorizontalPattern: 가로줄 패턴.
  • VerticalPattern: 세로줄 패턴.
  • CrossPattern: 격자 패턴.

아래는 다양한 브러시 스타일을 사용하는 예제입니다.


class BrushStyles(QWidget):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("다양한 QBrush 스타일 예제")
        self.setGeometry(100, 100, 600, 400)

    def paintEvent(self, event):
        painter = QPainter(self)
        
        # 각기 다른 브러시 스타일로 사각형 입력
        styles = [0, 1, 2, 3, 4]
        for index, style in enumerate(styles):
            painter.setBrush(QBrush(QColor(255, 0, 0), style))
            painter.drawRect(50 + index*100, 50, 80, 80)

if __name__ == "__main__":
    app = QApplication(sys.argv)
    brush_styles = BrushStyles()
    brush_styles.show()
    sys.exit(app.exec_())

4.1 스타일 설명

  • 각기 다른 QBrush 스타일을 사용하여 같은 색상의 사각형을 그릴 수 있습니다.
  • 각각의 브러시 스타일이 도형에 미치는 영향을 시각적으로 보여줍니다.

5. 그라디언트 QBrush 사용하기

QBrush를 사용하여 그라디언트 효과를 추가하면, 훨씬 더 매력적인 그래픽을 만들 수 있습니다. 아래는 QLinearGradient와 QRadialGradient를 사용하는 방법입니다.


from PyQt5.QtGui import QLinearGradient, QRadialGradient

class GradientBrush(QWidget):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("그라디언트 QBrush 예제")
        self.setGeometry(100, 100, 600, 400)

    def paintEvent(self, event):
        painter = QPainter(self)

        # 선형 그라디언트 설정
        linear_gradient = QLinearGradient(0, 0, 600, 0)
        linear_gradient.setColorAt(0, QColor(255, 0, 0))
        linear_gradient.setColorAt(1, QColor(0, 0, 255))
        painter.setBrush(QBrush(linear_gradient))
        painter.drawRect(50, 50, 500, 100)

        # 방사형 그라디언트 설정
        radial_gradient = QRadialGradient(300, 300, 100)
        radial_gradient.setColorAt(0, QColor(0, 255, 0))
        radial_gradient.setColorAt(1, QColor(0, 0, 255))
        painter.setBrush(QBrush(radial_gradient))
        painter.drawEllipse(200, 200, 200, 200)

if __name__ == "__main__":
    app = QApplication(sys.argv)
    gradient_brush = GradientBrush()
    gradient_brush.show()
    sys.exit(app.exec_())

5.1 그라디언트 설명

  • QLinearGradient를 사용하여 선형 그라디언트로 붉은색에서 파란색으로 변화하는 사각형을 그립니다.
  • QRadialGradient를 사용하여 중심에서부터 초록색에서 파란색으로 변화하는 원을 그립니다.

6. 마무리

이제 QPainter와 QBrush를 사용하여 기본적인 그래픽을 그리는 방법과 다양한 브러시 스타일을 사용하는 방법을 배웠습니다. PyQt를 활용하여 복잡하고 매력적인 그래픽을 생성할 수 있는 기반을 마련했습니다. PyQt의 그래픽 기능을 더 깊이 탐구하여 나만의 애플리케이션을 만들기 바랍니다.

더 많은 예제와 문법을 활용하여 자신만의 창의적인 그래픽 프로젝트를 만들어 보세요.

참고 문헌