728x90
반응형

QGridLayout은 PyQt5에서 제공하는 레이아웃 관리 도구 중 하나로, 위젯들을 행(row)과 열(column)로 구성된 그리드 형태로 배치할 수 있습니다.
이번 포스팅에서는 QGridLayout의 사용법과 예제 코드를 자세히 설명하겠습니다.


예제 코드: 간단한 QGridLayout 구현

아래는 QGridLayout을 이용해 간단한 사용자 입력 폼을 구현한 코드입니다.

import sys
from PyQt5.QtWidgets import (QApplication, QWidget, QGridLayout, QLabel, QLineEdit, QTextEdit)


class MyApp(QWidget):

    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        # 1. GridLayout 생성
        grid = QGridLayout()
        self.setLayout(grid)

        # 2. 위젯 추가
        grid.addWidget(QLabel('Title:'), 0, 0)    # (0, 0) 위치에 Label 추가
        grid.addWidget(QLabel('Author:'), 1, 0)  # (1, 0) 위치에 Label 추가
        grid.addWidget(QLabel('Review:'), 2, 0)  # (2, 0) 위치에 Label 추가

        grid.addWidget(QLineEdit(), 0, 1)        # (0, 1) 위치에 QLineEdit 추가
        grid.addWidget(QLineEdit(), 1, 1)        # (1, 1) 위치에 QLineEdit 추가
        grid.addWidget(QTextEdit(), 2, 1)        # (2, 1) 위치에 QTextEdit 추가

        # 3. 윈도우 설정
        self.setWindowTitle('QGridLayout')
        self.setGeometry(300, 300, 300, 200)
        self.show()


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

코드 설명

1. QGridLayout 생성

grid = QGridLayout()
self.setLayout(grid)

 

  • QGridLayout 객체를 생성하고, self.setLayout()을 통해 현재 QWidget에 레이아웃으로 설정합니다.
  • 이제 생성한 그리드 레이아웃에 위젯을 자유롭게 추가할 수 있습니다.

2. 위젯 추가

 

grid.addWidget(QLabel('Title:'), 0, 0)
grid.addWidget(QLabel('Author:'), 1, 0)
grid.addWidget(QLabel('Review:'), 2, 0)
  • addWidget(widget, row, column) 메서드를 사용해 특정 위치에 위젯을 추가합니다.
  • 여기서 (row, column)은 그리드 내 위젯이 배치될 위치를 의미합니다.
    • 예: 0, 0은 첫 번째 행, 첫 번째 열을 뜻합니다.
  • 예제에서는 제목, 저자, 리뷰라는 라벨을 (0, 0), (1, 0), (2, 0) 위치에 추가했습니다.

3. 입력 위젯 배치

grid.addWidget(QLineEdit(), 0, 1)
grid.addWidget(QLineEdit(), 1, 1)
grid.addWidget(QTextEdit(), 2, 1)

 

 

  • 텍스트를 입력받는 위젯을 라벨의 오른쪽에 배치했습니다.
    • (0, 1): 제목 입력란
    • (1, 1): 저자 입력란
    • (2, 1): 리뷰 입력란
  • QLineEdit: 한 줄 텍스트 입력을 위한 위젯입니다.
  • QTextEdit: 여러 줄 텍스트 입력을 위한 위젯입니다.

4. 윈도우 설정

self.setWindowTitle('QGridLayout')
self.setGeometry(300, 300, 300, 200)
self.show()

 

 

  • setWindowTitle: 윈도우 제목을 설정합니다.
  • setGeometry: 윈도우의 위치와 크기를 지정합니다.
    • (x, y, width, height) 순서로 설정됩니다.

실행 결과

코드를 실행하면 아래와 같은 윈도우가 생성됩니다.

 

 

  • TitleAuthor는 한 줄 입력란(QLineEdit),
  • Review는 여러 줄 입력란(QTextEdit)으로 구성되어 있습니다.
  •  

 

QGridLayout의 특징

  • 그리드 레이아웃은 행(row)과 열(column)을 기준으로 위젯을 배치합니다.
  • 여러 개의 위젯을 체계적으로 정렬할 때 유용합니다.
  • 하나의 셀에 여러 행 또는 열을 차지하도록 설정할 수도 있습니다.

QGridLayout 추가 메서드

메서드설명

addWidget(widget, row, column) 지정된 위치에 위젯을 추가합니다.
addWidget(widget, row, column, rowspan, colspan) 위젯을 여러 행/열에 걸쳐 배치합니다.
setSpacing(spacing) 셀 간의 간격을 설정합니다.
setColumnStretch(column, value) 특정 열의 비율을 설정합니다. (값이 클수록 공간을 더 많이 차지함)
setRowStretch(row, value) 특정 행의 비율을 설정합니다.

 

활용 팁

  1. 다양한 위젯 배치
    QGridLayout은 버튼, 슬라이더, 콤보박스 등 다양한 위젯을 배치할 수 있습니다.
  2. 동적 레이아웃 구성
    위젯을 추가/삭제하거나 크기를 조정하여 반응형 UI를 구성할 수 있습니다.
  3. 공간 비율 조정
    setColumnStretch()와 setRowStretch()를 사용하면 특정 행이나 열이 더 많은 공간을 차지하도록 설정할 수 있습니다.

결론

QGridLayout은 PyQt5에서 유연하고 강력한 레이아웃 관리 도구로, 복잡한 UI를 간단히 구현할 수 있습니다.
이번 포스팅에서 소개한 예제를 바탕으로 QGridLayout을 활용한 다양한 프로젝트를 시도해 보세요! 😊

 

728x90
반응형

+ Recent posts