PyQt개발강좌, QPen을 통한 선 스타일, 두께, 색상 설정

PyQt는 Python에서 Qt 애플리케이션을 생성하기 위한 라이브러리로, 풍부한 GUI 요소와 다양한 기능을 제공합니다. 이번 강좌에서는 PyQt의 QPen 클래스를 이용하여 선의 스타일, 두께, 색상을 설정하는 방법에 대해 자세히 다루어 보겠습니다.

QPen이란?

QPen은 PyQt에서 선을 그리기 위한 펜 스타일을 정의하는 클래스입니다. 이 클래스는 선의 두께, 스타일, 색상 등의 속성을 설정할 수 있으며, QPainter와 함께 사용되어 도형이나 텍스트를 그릴 때 매우 유용합니다.

QPen 클래스의 주요 속성

  • 선 색상 (Color): 선의 색상을 정의합니다.
  • 선 두께 (Width): 선의 두께를 픽셀 단위로 설정합니다.
  • 선 스타일 (Style): 선의 스타일을 설정합니다. 연속선, 점선, 대시선 등을 선택할 수 있습니다.
  • 모서리 스타일 (Cap): 선의 끝모양을 설정합니다. 평탄한 끝, 둥근 끝, 사각형 끝 등을 제공 합니다.
  • 조인 스타일 (Join): 선의 합쳐지는 부분 모양을 설정합니다. 평탄한 조인, 둥근 조인, 비스듬한 조인 등이 있습니다.

QPen 사용하기

이제 QPen을 사용하여 선의 스타일, 두께, 색상을 설정하는 기본 예제를 살펴보겠습니다. 다음은 PyQt5 애플리케이션에서 QPen을 사용하는 간단한 코드 예제입니다.

기본 예제 코드


import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QVBoxLayout, QWidget
from PyQt5.QtGui import QPainter, QPen, QColor
from PyQt5.QtCore import Qt

class Window(QMainWindow):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("QPen 예제")
        self.setGeometry(100, 100, 600, 400)

        self.central_widget = QWidget()
        self.setCentralWidget(self.central_widget)

    def paintEvent(self, event):
        painter = QPainter(self)
        
        # QPen 생성
        pen = QPen(Qt.blue)  # 선 색상: 파란색
        pen.setWidth(3)      # 선 두께: 3픽셀
        pen.setStyle(Qt.SolidLine)  # 선 스타일: 실선
        painter.setPen(pen)
        
        # 선 그리기
        painter.drawLine(50, 50, 550, 50)  # 수평선
        
        # 다른 스타일 변경
        pen.setColor(QColor(255, 0, 0))  # 색상: 빨간색
        pen.setStyle(Qt.DashLine)  # 선 스타일: 점선
        painter.setPen(pen)
        painter.drawLine(50, 100, 550, 100)  # 점선
        
        # 두께 변경
        pen.setColor(QColor(0, 255, 0))  # 색상: 초록색
        pen.setWidth(5)                  # 두께: 5픽셀
        painter.setPen(pen)
        painter.drawLine(50, 150, 550, 150)  # 두꺼운 실선

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

코드 설명

위 코드는 QPen을 사용하여 다양한 스타일의 선을 그리는 예제입니다.

  • QPen 생성: 파란색 실선으로 두께가 3픽셀인 펜을 생성합니다.
  • drawLine: drawLine 메소드를 이용하여 수평선을 그립니다.
  • 스타일 변경: 선 색상을 빨간색으로 바꾸고, 점선 스타일로 변경하여 또 다른 선을 그립니다.
  • 두께 변경: 마지막으로 초록색으로 두께가 5픽셀인 선을 그립니다.

QPen의 스타일 설정

QPen의 스타일은 여러 가지가 있으며, 주로 사용할 수 있는 스타일은 다음과 같습니다:

  • Qt.SolidLine: 실선
  • Qt.DashLine: 점선
  • Qt.DotLine: 점선
  • Qt.DashDotLine: 대시-점 선
  • Qt.DashDotDotLine: 대시-점-점 선
  • Qt.CustomDashLine: 사용자 정의 대시 선

스타일 변화 예제

다음은 QPen의 다양한 스타일을 각각 실습할 수 있는 예제입니다.


import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QVBoxLayout, QWidget
from PyQt5.QtGui import QPainter, QPen, QColor
from PyQt5.QtCore import Qt

class StyleExampleWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("QPen 스타일 예제")
        self.setGeometry(100, 100, 600, 400)

    def paintEvent(self, event):
        painter = QPainter(self)
        
        # 다양한 선 스타일을 사용하여 선 그리기
        styles = [
            (Qt.SolidLine, QColor(255, 0, 0)),  # 실선
            (Qt.DashLine, QColor(0, 255, 0)),    # 점선
            (Qt.DotLine, QColor(0, 0, 255)),     # 점선
            (Qt.DashDotLine, QColor(255, 255, 0)),  # 대시-점
            (Qt.DashDotDotLine, QColor(255, 0, 255)) # 대시-점-점
        ]

        for index, (style, color) in enumerate(styles):
            pen = QPen(color)
            pen.setStyle(style)
            pen.setWidth(3)
            painter.setPen(pen)
            painter.drawLine(50, 50 + index * 30, 550, 50 + index * 30)  # 각 스타일 별 선 그리기

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

코드 설명

위 코드는 여러 가지 선 스타일을 배열로 정의한 후, QPen을 이용하여 각각의 스타일과 색상으로 선을 그립니다.

  • 선 스타일과 색상을 튜플로 저장한 리스트를 사용하여 반복문으로 각 스타일의 선을 그립니다.
  • 각 선은 y축에서 30픽셀 간격으로 배치되어 서로 다르게 보이게 됩니다.

QPen의 모서리 스타일과 조인 스타일 설정

QPen은 선의 모서리와 조인 스타일을 설정할 수 있는 기능이 있습니다. 모서리 스타일은 선의 끝 부분의 형태를 다루고, 조인 스타일은 선이 만나는 부분의 형태를 다룹니다.

모서리 스타일

  • Qt.FlatCap: 평면 끝.
  • Qt.RoundCap: 둥근 끝.
  • Qt.SquareCap: 사각형 끝.

조인 스타일

  • Qt.MiterJoin: 뾰족한 조인.
  • Qt.RoundJoin: 둥근 조인.
  • Qt.BevelJoin: 비스듬한 조인.

모서리 스타일 및 조인 스타일 예제


import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QWidget
from PyQt5.QtGui import QPainter, QPen, QColor
from PyQt5.QtCore import Qt

class JoinCapExampleWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("모서리 및 조인 스타일 예제")
        self.setGeometry(100, 100, 600, 400)

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

        # 맞춤 모서리 스타일과 조인 스타일
        pen = QPen(QColor(0, 0, 0), 5)
        
        # Miter Join
        pen.setJoinStyle(Qt.MiterJoin)
        painter.setPen(pen)
        painter.drawLine(50, 50, 150, 150)
        painter.drawLine(150, 150, 50, 150)
        
        # Round Join
        pen.setJoinStyle(Qt.RoundJoin)
        painter.setPen(pen)
        painter.drawLine(250, 50, 350, 150)
        painter.drawLine(350, 150, 250, 150)

        # Bevel Join
        pen.setJoinStyle(Qt.BevelJoin)
        painter.setPen(pen)
        painter.drawLine(450, 50, 550, 150)
        painter.drawLine(550, 150, 450, 150)

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

코드 설명

위 예제에서는 선의 모서리와 조인 스타일을 각각 테스트해보는 코드를 작성하였습니다.

  • 각각의 조인 스타일에 대해 다른 선을 그리며, 각 조인 스타일의 결과를 쉽게 확인할 수 있습니다.
  • 여기서 다룬 모서리 스타일과 조인 스타일을 조합하여 원하는 스타일의 선을 생성할 수 있습니다.

마치며

이번 강좌에서는 PyQt의 QPen 클래스를 사용하여 선의 스타일, 두께, 색상 및 모서리와 조인 스타일을 설정하는 방법을 알아보았습니다. 이 기능을 통해 여러분은 더욱 다양한 그래픽 요소를 GUI 애플리케이션에 추가할 수 있습니다.

PyQt에서 제공하는 다양한 그래픽 기능을 활용하면, 자신만의 독특한 사용자 인터페이스를 만들 수 있습니다. 계속해서 다양한 PyQt 기능을 탐험하여 실력을 키워 나가시길 바랍니다.