프로그래밍/PyQt5 GUI

48. 직선 그리고 (drawLine)

디아블로 2021. 7. 29. 11:17

48-1 예제: ex47

import sys
from PyQt5.QtWidgets import (QApplication, QWidget)
from PyQt5.QtGui import QPainter, QPen
from PyQt5.QtCore import Qt

class MyApp(QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        self.setWindowTitle('drawLine')
        self.setGeometry(300, 300, 400, 300)
        self.show()

    def paintEvent(self, e) -> None:
        qp = QPainter()
        qp.begin(self)
        self.draw_line(qp)
        qp.end()

    def draw_line(self, qp):
        qp.setPen(QPen(Qt.blue, 8))
        qp.drawLine(30, 230, 200, 50)
        qp.setPen(QPen(Qt.green, 8))
        qp.drawLine(140, 60, 320, 280)
        qp.setPen(QPen(Qt.red, 8))
        qp.drawLine(330, 250, 40, 190)

if __name__ == '__main__':
    app = QApplication(sys.argv)
    win = MyApp()
    sys.exit(app.exec_())

48-2 설명

세 개의 직선이 그립니다.

setPen()을 이용해서 선의 색상과 두께를 설정합니다.

drawLine(x1, y1, x2, y2)의 형태로 선의 양 끝점의 위치를 정수로 입력해 줍니다.

48-3 결과

48-4 예제2

import sys
from PyQt5.QtWidgets import (QApplication, QWidget)
from PyQt5.QtGui import QPainter, QPen
from PyQt5.QtCore import Qt

class MyApp(QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        self.setWindowTitle('drawLine')
        self.setGeometry(300, 300, 400, 300)
        self.show()

    def paintEvent(self, e) -> None:
        qp = QPainter()
        qp.begin(self)
        self.draw_line(qp)
        qp.end()

    def draw_line(self, qp):
        qp.setPen(QPen(Qt.black, 3, Qt.SolidLine))
        qp.drawLine(20, 20, 380, 20)
        qp.drawText(30, 40, 'Qt.SolidLine')

        qp.setPen(QPen(Qt.black, 3, Qt.DashLine))
        qp.drawLine(20, 70, 380, 70)
        qp.drawText(30, 90, 'Qt.DashLine')

        qp.setPen(QPen(Qt.black, 3, Qt.DotLine))
        qp.drawLine(20, 120, 380, 120)
        qp.drawText(30, 140, 'Qt.DotLine')

        qp.setPen(QPen(Qt.black, 3, Qt.DashDotLine))
        qp.drawLine(20, 170, 380, 170)
        qp.drawText(30, 190, 'Qt.DashDotLine')

        qp.setPen(QPen(Qt.black, 3, Qt.DashDotDotLine))
        qp.drawLine(20, 220, 380, 220)
        qp.drawText(30, 240, 'Qt.DashDotDotLine')

        pen = QPen(Qt.black, 3, Qt.CustomDashLine)
        pen.setDashPattern([4, 3, 2, 5])
        qp.setPen(pen)
        qp.drawLine(20, 270, 380, 270)
        qp.drawText(30, 290, 'Qt.CustomDashLine')

if __name__ == '__main__':
    app = QApplication(sys.argv)
    win = MyApp()
    sys.exit(app.exec_())

48-5 설명

QPen 위젯의 세 번째 매개변수에 Qt.SolidLine, Qt.DashLine 등을 입력하면 다양한 형태의 선 종류를 설정할 수 있습니다.

48-6 결과