1. QGridLayout:  표(그리드) 레이아웃

: 행/열로 위젯을 배치하는 2차원 레이아웃 공식문서

더보기
import sys
from PySide6.QtWidgets import (
    QApplication, QWidget, QPushButton, QGridLayout
)

class GridExample(QWidget):
    def __init__(self):
        super().__init__()

        b1 = QPushButton("One")
        b2 = QPushButton("Two")
        b3 = QPushButton("Three")
        b4 = QPushButton("Four")
        b5 = QPushButton("Five")

        layout = QGridLayout(self)
        layout.addWidget(b1, 0, 0)           # (row=0, col=0)
        layout.addWidget(b2, 0, 1)           # (0, 1)
        layout.addWidget(b3, 1, 0, 1, 2)     # (1,0)에서 1행 2열 span
        layout.addWidget(b4, 2, 0)
        layout.addWidget(b5, 2, 1)

if __name__ == "__main__":
    app = QApplication(sys.argv)
    w = GridExample()
    w.show()
    sys.exit(app.exec())

사용된 좌표 의미

  • (0, 0) = 0행 0열
  • (1, 0) = 1행 0열

 



2. Qt Designer 에서 QGridLayout 사용하기 (1)

더보기

위젯을 선택하고 레이아웃을 적용하면 → 선택한 위젯들만 묶는 부분 레이아웃이 만들어집니다.


 

3. Qt Designer 에서 QGridLayout 사용하기 (2)

더보기

`Break Layout`을 누르면 방금 만든 `QVBoxLayout` 묶음이 해제됩니다. 

버튼들은 폼 위에 그대로 남아 있지만, 더 이상 `QVBoxLayout`이 버튼들의 위치와 크기를 관리하지 않습니다.

 


폼을 선택하고 레이아웃을 적용하면 → 폼 전체를 관리하는 최상위 레이아웃이 만들어집니다.

 

 

 

 

 

 

 

 

0. 학습 목표

더보기

이번 6.4 단계에서는 PySide6에서 위젯을 행과 열 기준으로 배치할 때 사용하는 QGridLayout을 학습합니다.

 

이전 단계에서 QHBoxLayout은 위젯을 가로 방향으로 배치하고, QVBoxLayout은 위젯을 세로 방향으로 배치한다고 배웠습니다.

이번에는 위젯을 표처럼 행(row)열(column) 위치에 배치하는 2차원 그리드 레이아웃을 살펴봅니다.

 

학습 목표 내용
QGridLayout 개념 이해 QGridLayout이 위젯을 행과 열로 배치하는 2차원 레이아웃이라는 점을 이해합니다.
row, column 좌표 이해 위젯을 어느 행과 어느 열에 배치하는지 지정하는 방법을 이해합니다.
addWidget() 위치 인자 이해 addWidget(위젯, 행, 열) 구조를 이해합니다.
span 구조 이해 위젯이 여러 행 또는 여러 열을 차지하도록 배치하는 방법을 이해합니다.
Qt Designer 사용 흐름 이해 Qt Designer에서 여러 위젯을 선택한 뒤 Grid Layout을 적용하는 흐름을 이해합니다.

이번 단계의 핵심
QGridLayout은 위젯을 표처럼 행과 열 위치에 배치하는 레이아웃입니다.

 

단순히 위에서 아래, 왼쪽에서 오른쪽으로 배치하는 것이 아니라, 원하는 위치를 (row, column) 좌표로 지정할 수 있습니다.

1. QGridLayout이란?

더보기

1.1 QGridLayout의 기본 의미

QGridLayout은 PySide6에서 제공하는 레이아웃 클래스 중 하나입니다.

QHBoxLayout과 QVBoxLayout이 한 방향으로 위젯을 배치한다면, QGridLayout은 행과 열을 기준으로 위젯을 배치합니다.

 

이름 의미
Q Qt에서 제공하는 클래스라는 의미입니다.
Grid 격자, 표, 행과 열로 나누어진 구조를 의미합니다.
Layout 위젯의 위치와 크기를 자동으로 관리하는 배치 구조를 의미합니다.
QGridLayout
    ↓
Grid Layout
    ↓
위젯을 행(row)과 열(column) 위치에 배치하는 레이아웃

따라서 QGridLayout은 여러 위젯을 표 형태로 배치할 때 사용하는 레이아웃입니다.

 

1.2 QGridLayout이 필요한 경우

GUI 화면에서는 위젯을 단순히 한 줄로 나열하는 것보다, 표처럼 정렬해야 하는 경우가 많습니다.

예를 들어 계산기 버튼, 입력 폼, 설정 화면, 대시보드 화면은 행과 열 구조로 배치하는 것이 자연스럽습니다.

 

사용 예시 설명
계산기 버튼 숫자 버튼과 연산자 버튼을 행과 열에 맞춰 배치할 때 사용합니다.
입력 폼 라벨과 입력창을 표처럼 정렬할 때 사용합니다.
설정 화면 여러 설정 항목을 일정한 간격으로 정렬할 때 사용합니다.
대시보드 화면 여러 정보 카드나 버튼을 격자 형태로 배치할 때 사용합니다.

중요한 점
QGridLayout은 위젯을 직접 좌표 픽셀 위치에 놓는 방식이 아닙니다.

행과 열 위치를 지정하면, 레이아웃이 창 크기에 맞춰 위젯의 위치와 크기를 자동으로 관리합니다.

2. QGridLayout 기본 구조

더보기

2.1 기본 사용 흐름

QGridLayout을 사용하는 기본 흐름은 다음과 같습니다.

부모 위젯 생성
    ↓
버튼 같은 자식 위젯 생성
    ↓
QGridLayout 생성
    ↓
addWidget()으로 위젯과 위치 지정
    ↓
행과 열 기준으로 자동 배치

QGridLayout에서 중요한 점은 addWidget()에 위젯뿐만 아니라 행 번호열 번호를 함께 전달한다는 것입니다.

 

2.2 addWidget()의 기본 구조

QGridLayout에서 가장 기본적인 위젯 추가 방식은 다음과 같습니다.

layout.addWidget(위젯, 행, 열)

예를 들어 다음 코드는 버튼을 0행 0열에 배치합니다.

layout.addWidget(b1, 0, 0)
인자 의미
b1 레이아웃에 추가할 위젯입니다.
0 위젯을 배치할 행 번호입니다.
0 위젯을 배치할 열 번호입니다.

중요한 점
QGridLayout의 행과 열 번호는 보통 0부터 시작합니다.

즉, 첫 번째 행은 0행이고, 첫 번째 열은 0열입니다.

2.3 row와 column 좌표 이해

QGridLayout은 표처럼 행과 열을 기준으로 위치를 지정합니다.

이때 위치는 (row, column) 형태로 생각할 수 있습니다.

        column 0     column 1
row 0   (0, 0)       (0, 1)

row 1   (1, 0)       (1, 1)

row 2   (2, 0)       (2, 1)
좌표 의미
(0, 0) 0행 0열입니다. 가장 왼쪽 위 위치로 이해할 수 있습니다.
(0, 1) 0행 1열입니다. 같은 행에서 오른쪽 열 위치입니다.
(1, 0) 1행 0열입니다. 한 줄 아래의 첫 번째 열 위치입니다.
(2, 1) 2행 1열입니다. 세 번째 행의 두 번째 열 위치입니다.

2.4 여러 칸을 차지하는 span 구조

QGridLayout에서는 하나의 위젯이 한 칸만 차지할 수도 있고, 여러 칸을 차지할 수도 있습니다.

이때 사용하는 값이 rowSpancolumnSpan입니다.

layout.addWidget(위젯, 시작행, 시작열, 차지할행수, 차지할열수)

이번 예제에서는 다음 코드가 span 구조를 사용합니다.

layout.addWidget(b3, 1, 0, 1, 2)
의미
b3 배치할 버튼 위젯입니다.
1 1행에서 시작합니다.
0 0열에서 시작합니다.
1 1개의 행을 차지합니다.
2 2개의 열을 차지합니다.
        column 0          column 1
row 0   [ One ]           [ Two ]

row 1   [       Three        ]   ← 1행 2열 차지

row 2   [ Four ]          [ Five ]

정리
QGridLayout에서 span은 위젯이 여러 칸을 차지하도록 만드는 기능입니다.

예를 들어 버튼 하나를 두 열 너비로 넓게 배치하고 싶을 때 사용할 수 있습니다.

3. 예제 코드

더보기

3.1 실습 준비

이번 예제는 PyCharm에서 진행합니다.

새 Python 파일을 만들고 파일명을 main.py로 저장합니다.

프로젝트 가상환경에는 PySide6가 설치되어 있어야 합니다.

 

3.2 main.py 예제 코드

import sys
from PySide6.QtWidgets import (
    QApplication, QWidget, QPushButton, QGridLayout
)

class GridExample(QWidget):
    def __init__(self):
        super().__init__()

        self.setWindowTitle("QGridLayout 예제")
        self.resize(360, 220)

        b1 = QPushButton("One")
        b2 = QPushButton("Two")
        b3 = QPushButton("Three")
        b4 = QPushButton("Four")
        b5 = QPushButton("Five")

        layout = QGridLayout(self)
        layout.addWidget(b1, 0, 0)           # (row=0, col=0)
        layout.addWidget(b2, 0, 1)           # (row=0, col=1)
        layout.addWidget(b3, 1, 0, 1, 2)     # 1행 0열에서 시작, 1행 2열 차지
        layout.addWidget(b4, 2, 0)           # (row=2, col=0)
        layout.addWidget(b5, 2, 1)           # (row=2, col=1)

if __name__ == "__main__":
    app = QApplication(sys.argv)
    w = GridExample()
    w.show()
    sys.exit(app.exec())

 

이 예제는 버튼 5개를 만들고, QGridLayout을 사용해 버튼을 행과 열 위치에 맞춰 배치합니다.

GridExample(QWidget)
    ↓
QPushButton("One")
QPushButton("Two")
QPushButton("Three")
QPushButton("Four")
QPushButton("Five")
    ↓
QGridLayout(self)
    ↓
행(row), 열(column) 위치에 버튼 배치

 

3.3 실행 결과 구조

프로그램을 실행하면 창 안에 버튼 5개가 다음과 같은 그리드 구조로 배치됩니다.

┌───────────────────────────────────┐
│  [ One ]        [ Two ]            │
│                                   │
│  [          Three          ]       │
│                                   │
│  [ Four ]       [ Five ]           │
└───────────────────────────────────┘

여기서 Three 버튼은 1행 0열에서 시작하여 2개의 열을 차지합니다.

따라서 One, Two 버튼보다 가로로 더 넓게 배치됩니다.

 

3.4 사용된 좌표 의미

코드 좌표 의미
layout.addWidget(b1, 0, 0) (0, 0) 0행 0열에 One 버튼 배치
layout.addWidget(b2, 0, 1) (0, 1) 0행 1열에 Two 버튼 배치
layout.addWidget(b3, 1, 0, 1, 2) (1, 0) 1행 0열에서 시작하여 1행 2열을 차지
layout.addWidget(b4, 2, 0) (2, 0) 2행 0열에 Four 버튼 배치
layout.addWidget(b5, 2, 1) (2, 1) 2행 1열에 Five 버튼 배치

3.5 예제 파일

예제 파일은 main.py로 저장합니다.

 


4. 코드 분석

더보기

4.1 주석 포함 전체 코드

import sys                                                   # [1] 파이썬 실행 환경과 종료 처리를 위해 sys 모듈을 가져옴
from PySide6.QtWidgets import (                              # [2] PySide6에서 GUI 구성에 필요한 클래스들을 가져옴
    QApplication, QWidget, QPushButton, QGridLayout
)
                                                             #     - QApplication: Qt GUI 프로그램 전체를 관리하는 클래스
                                                             #     - QWidget: 화면에 표시되는 기본 창 위젯 클래스
                                                             #     - QPushButton: 클릭 가능한 버튼 위젯 클래스
                                                             #     - QGridLayout: 위젯을 행과 열로 배치하는 그리드 레이아웃 클래스

class GridExample(QWidget):                                  # [3] QWidget을 상속받아 새 창 클래스를 정의
    def __init__(self):                                      # [4] GridExample 객체가 생성될 때 자동으로 실행되는 초기화 메서드
        super().__init__()                                   # [5] 부모 클래스(QWidget)의 초기화 기능을 먼저 실행

        self.setWindowTitle("QGridLayout 예제")               # [6] 창 제목 설정
        self.resize(360, 220)                                # [7] 창 크기 설정

        b1 = QPushButton("One")                              # [8] 첫 번째 버튼 생성
        b2 = QPushButton("Two")                              # [9] 두 번째 버튼 생성
        b3 = QPushButton("Three")                            # [10] 세 번째 버튼 생성
        b4 = QPushButton("Four")                             # [11] 네 번째 버튼 생성
        b5 = QPushButton("Five")                             # [12] 다섯 번째 버튼 생성

        layout = QGridLayout(self)                           # [13] QGridLayout 생성
                                                             #      - self는 현재 창을 의미함
                                                             #      - QGridLayout(self)는 현재 창에 레이아웃을 바로 적용하는 방식

        layout.addWidget(b1, 0, 0)                           # [14] b1을 0행 0열에 배치
        layout.addWidget(b2, 0, 1)                           # [15] b2를 0행 1열에 배치
        layout.addWidget(b3, 1, 0, 1, 2)                     # [16] b3를 1행 0열에서 시작해 1행 2열 크기로 배치
        layout.addWidget(b4, 2, 0)                           # [17] b4를 2행 0열에 배치
        layout.addWidget(b5, 2, 1)                           # [18] b5를 2행 1열에 배치

if __name__ == "__main__":                                   # [19] 이 파일을 직접 실행할 때만 아래 코드 실행
    app = QApplication(sys.argv)                             # [20] Qt GUI 프로그램 실행을 관리하는 QApplication 객체 생성
    w = GridExample()                                        # [21] GridExample 창 객체 생성
    w.show()                                                 # [22] 창을 화면에 표시
    sys.exit(app.exec())                                     # [23] 이벤트 루프 시작
                                                             #      - 창이 닫힐 때까지 사용자 입력과 화면 이벤트를 처리함

 

4.2 단계별 분석

1단계: 필요한 클래스 가져오기

from PySide6.QtWidgets import (
    QApplication, QWidget, QPushButton, QGridLayout
)

이번 예제에서는 기본 창을 만들고, 버튼을 그리드 구조로 배치하기 위해 네 가지 클래스를 사용합니다.

클래스 역할
QApplication Qt GUI 프로그램 전체 실행을 관리합니다.
QWidget 화면에 표시되는 기본 창을 만듭니다.
QPushButton 클릭 가능한 버튼을 만듭니다.
QGridLayout 위젯을 행과 열 기준으로 배치합니다.

2단계: QWidget을 상속한 창 클래스 만들기

class GridExample(QWidget):
    def __init__(self):
        super().__init__()

GridExample 클래스는 QWidget을 상속받아 만든 사용자 정의 창 클래스입니다.

이 클래스 안에서 버튼을 만들고, QGridLayout을 적용합니다.

 

3단계: 버튼 5개 생성하기

b1 = QPushButton("One")
b2 = QPushButton("Two")
b3 = QPushButton("Three")
b4 = QPushButton("Four")
b5 = QPushButton("Five")

화면에 배치할 버튼 5개를 생성합니다.

이 단계에서는 버튼 객체만 만든 상태입니다.

아직 버튼이 창 안에 배치된 것은 아닙니다.

 

4단계: QGridLayout 생성하기

layout = QGridLayout(self)

QGridLayout 객체를 생성합니다.

괄호 안에 self를 넣었으므로, 현재 창에 이 레이아웃이 바로 적용됩니다.

self
    ↓
현재 GridExample 창
    ↓
QGridLayout(self)
    ↓
현재 창의 그리드 레이아웃으로 적용

 

5단계: 버튼을 행과 열 위치에 배치하기

layout.addWidget(b1, 0, 0)
layout.addWidget(b2, 0, 1)
layout.addWidget(b4, 2, 0)
layout.addWidget(b5, 2, 1)

위 코드는 각 버튼을 지정한 행과 열 위치에 배치합니다.

layout.addWidget(b1, 0, 0)  →  0행 0열
layout.addWidget(b2, 0, 1)  →  0행 1열
layout.addWidget(b4, 2, 0)  →  2행 0열
layout.addWidget(b5, 2, 1)  →  2행 1열

6단계: Three 버튼을 두 열에 걸쳐 배치하기

layout.addWidget(b3, 1, 0, 1, 2)

이 코드는 b3 버튼을 1행 0열에 배치하되, 2개의 열을 차지하도록 만듭니다.

인자 설명
b3 배치할 버튼입니다.
1 1행에서 시작합니다.
0 0열에서 시작합니다.
1 1개의 행을 차지합니다.
2 2개의 열을 차지합니다.
row 0   [ One ]       [ Two ]

row 1   [        Three        ]

row 2   [ Four ]      [ Five ]

중요한 점
QGridLayout에서는 addWidget()에 행과 열을 지정해야 합니다.

또한 rowSpan과 columnSpan을 사용하면 하나의 위젯이 여러 칸을 차지하도록 만들 수 있습니다.

5. Qt 위젯들을 선택하고 Lay Out in a Grid를 누른 경우

더보기

5.1 선택한 위젯끼리만 그리드 레이아웃으로 묶임

Qt Designer에서 폼 위에 버튼이나 입력창 같은 위젯을 여러 개 올려놓을 수 있습니다.

이때 위젯 여러 개를 선택한 뒤 Lay Out in a Grid 버튼을 누르면, 선택한 위젯들만 하나의 그리드 레이아웃으로 묶입니다.

 

즉, 폼 전체에 레이아웃이 적용된 것이 아니라, 선택한 위젯 묶음에만 QGridLayout이 적용된 상태입니다.

Form(QWidget)
    └── gridLayout
            ├── QPushButton
            ├── QPushButton
            ├── QPushButton
            ├── QPushButton
            └── QPushButton

Object Inspector에서는 gridLayout 같은 레이아웃 객체가 생긴 것을 확인할 수 있습니다.

Designer 화면에서는 선택한 위젯들이 하나의 격자 영역 안에 들어간 것처럼 보일 수 있습니다.

 

중요한 점

이때 생긴 것은 실제 화면에 보이는 QWidget이 아니라, 선택한 위젯들의 배치를 관리하는 QGridLayout 객체입니다.

 

겉으로는 표 영역이 생긴 것처럼 보이지만, 실제 역할은 선택한 위젯들을 행과 열 기준으로 정렬하는 배치 관리자입니다.

5.2 이 상태의 의미

예를 들어 버튼 4개를 선택하고 Lay Out in a Grid를 누르면 버튼들은 다음처럼 그리드 형태로 정렬될 수 있습니다.

[ Button 1 ]   [ Button 2 ]

[ Button 3 ]   [ Button 4 ]

하지만 이 레이아웃은 폼 전체를 관리하는 레이아웃이 아닙니다.

선택한 버튼 묶음만 관리하는 부분 레이아웃입니다.

 

구분 설명
적용 대상 선택한 위젯들
생성되는 구조 선택한 위젯들을 관리하는 QGridLayout
폼 전체 관리 여부 아직 폼 전체를 관리하는 최상위 레이아웃은 아님
주요 목적 일부 위젯들을 행과 열 기준으로 정렬하기

정리
위젯들을 선택하고 Lay Out in a Grid를 누르면, 선택한 위젯들만 QGridLayout으로 묶입니다.

이것은 폼 전체 레이아웃이 아니라 부분 레이아웃입니다.

6. Qt Break Layout을 한 경우

더보기

6.1 기존 레이아웃 묶음을 해제함

Break Layout은 이미 적용된 레이아웃을 해제하는 기능입니다.

앞에서 버튼 여러 개를 QGridLayout으로 묶었다면, Break Layout을 실행하면 그 묶음이 풀립니다.

Break Layout 전

Form(QWidget)
    └── gridLayout
            ├── QPushButton
            ├── QPushButton
            ├── QPushButton
            └── QPushButton
Break Layout 후

Form(QWidget)
    ├── QPushButton
    ├── QPushButton
    ├── QPushButton
    └── QPushButton

버튼 자체가 삭제되는 것은 아닙니다.

삭제되는 것은 버튼들을 관리하던 QGridLayout 구조입니다.

 

6.2 Break Layout 후 화면 상태

Break Layout을 하면 위젯들은 폼 위에 그대로 남아 있습니다.

하지만 더 이상 레이아웃이 위젯의 위치와 크기를 자동으로 관리하지 않습니다.

 

Break Layout 전

[ Button 1 ]   [ Button 2 ]
[ Button 3 ]   [ Button 4 ]
        ↑
QGridLayout이 행과 열 배치를 관리함
Break Layout 후

[ Button 1 ]      [ Button 2 ]      [ Button 3 ]      [ Button 4 ]
      ↑                ↑                ↑                ↑
각 위젯이 폼 위에 따로 놓인 상태

이 상태에서는 버튼들이 각각 독립적으로 폼 위에 놓여 있는 상태입니다.

따라서 창 크기를 바꿔도 버튼들이 레이아웃 기준으로 자연스럽게 재배치되지 않을 수 있습니다.

 

구분 설명
실행 기능 선택한 레이아웃을 해제합니다.
위젯 삭제 여부 위젯은 삭제되지 않고 그대로 남습니다.
레이아웃 관리 여부 해당 위젯들을 관리하던 레이아웃이 사라집니다.
결과 상태 위젯들이 폼 위에 개별적으로 놓인 상태가 됩니다.

중요한 점
Break Layout은 위젯을 삭제하는 기능이 아닙니다.

위젯을 묶고 있던 레이아웃만 해제하는 기능입니다.

7. Qt 그다음 폼을 선택하고 Lay Out in a Grid를 누른 경우

더보기

7.1 폼 전체에 최상위 레이아웃이 적용됨

Break Layout으로 기존 묶음을 해제한 뒤, 이번에는 버튼이 아니라 폼 자체를 선택합니다.

그리고 Lay Out in a Grid를 누르면 폼 전체에 QGridLayout이 적용됩니다.

이때 만들어지는 레이아웃은 선택한 위젯 묶음의 부분 레이아웃이 아니라, 폼 전체를 관리하는 최상위 레이아웃입니다.

Form(QWidget)
    └── Top-Level QGridLayout
            ├── QPushButton
            ├── QPushButton
            ├── QPushButton
            └── QPushButton

코드로 생각하면 다음과 비슷한 구조입니다.

layout = QGridLayout(self)

또는 다음 코드와도 같은 의미로 이해할 수 있습니다.

layout = QGridLayout()
self.setLayout(layout)

즉, 폼 자체가 QGridLayout을 기준으로 자식 위젯들의 위치와 크기를 관리하게 됩니다.

 

7.2 위젯 선택 레이아웃과 폼 선택 레이아웃의 차이

위젯을 선택해서 레이아웃을 적용한 경우와 폼을 선택해서 레이아웃을 적용한 경우는 겉으로 비슷해 보일 수 있습니다.

하지만 실제 의미는 다릅니다.

 

구분 위젯 선택 후 레이아웃 폼 선택 후 레이아웃
적용 대상 선택한 위젯들 폼 전체
레이아웃 종류 부분 레이아웃 최상위 레이아웃
관리 범위 선택한 위젯 묶음만 관리 폼 안의 자식 위젯 전체를 관리
창 크기 변경 대응 폼 전체 기준 대응은 부족할 수 있음 폼 크기 변경에 맞춰 위젯들이 자동 조정됨
코드 관점 선택한 위젯 그룹을 QGridLayout에 넣은 상태 self.setLayout() 또는 QGridLayout(self)에 가까운 상태

7.3 실습에서 확인할 핵심 흐름

이 차이는 실습 과정에서 다음 흐름으로 확인하면 이해하기 쉽습니다.

1. 버튼 여러 개를 선택한다.
2. Lay Out in a Grid를 누른다.
   → 선택한 버튼들만 QGridLayout으로 묶인다.

3. Break Layout을 누른다.
   → 버튼 묶음이 해제된다.

4. 폼 바탕을 선택한다.
5. Lay Out in a Grid를 누른다.
   → 폼 전체에 QGridLayout이 적용된다.

따라서 같은 Lay Out in a Grid 버튼을 눌러도, 무엇을 선택한 상태에서 눌렀는지에 따라 결과가 달라집니다.

 

이번 단계의 핵심
위젯을 선택하고 Lay Out in a Grid를 누르면 선택한 위젯들만 묶는 부분 레이아웃이 만들어집니다.

 

폼을 선택하고 Lay Out in a Grid를 누르면 폼 전체를 관리하는 최상위 레이아웃이 만들어집니다.

기억할 문장
QGridLayout으로 묶는 것과 폼 전체에 QGridLayout을 적용하는 것은 다릅니다.

위젯 선택은 부분 레이아웃, 폼 선택은 최상위 레이아웃입니다.

8. 정리

더보기

이번 단계에서는 PySide6에서 위젯을 행과 열 기준으로 배치하는 QGridLayout을 살펴보았습니다.

QGridLayout은 버튼, 입력창, 라벨 같은 위젯을 표처럼 정렬할 때 사용합니다.

 

QPushButton 생성
    ↓
QGridLayout 생성
    ↓
addWidget()으로 행과 열 위치 지정
    ↓
표처럼 위젯 배치
    ↓
창 크기 변경 시 자동 재배치
개념 정리
QGridLayout 위젯을 행과 열 기준으로 배치하는 2차원 레이아웃입니다.
row 위젯을 배치할 행 번호입니다.
column 위젯을 배치할 열 번호입니다.
addWidget(widget, row, column) 위젯을 특정 행과 열에 배치합니다.
rowSpan 위젯이 차지할 행의 개수입니다.
columnSpan 위젯이 차지할 열의 개수입니다.
Qt Designer 방식 위젯을 선택한 뒤 Lay Out in a Grid를 적용하여 그리드 레이아웃을 만듭니다.

이번 단계에서 기억할 문장
QGridLayout은 위젯을 표처럼 행과 열 위치에 배치하는 레이아웃입니다.

 

코드에서는 addWidget()에 row와 column을 지정하고, Qt Designer에서는 Lay Out in a Grid를 적용해 같은 구조를 만들 수 있습니다.

 

참고. 공식 문서로 확인하기

더보기

이번 예제에서 사용한 QGridLayout, Layout Management, .ui 파일, pyside6-uic는 Qt for Python 공식 문서에서 확인할 수 있습니다.

 

특히 이번 단계에서 중요한 부분은 QGridLayout이 행과 열로 나누어진 그리드 안에 위젯을 배치하는 레이아웃이라는 점입니다.

 

1. 공식 문서 참고 표

구분 공식 문서 확인할 내용
QGridLayout PySide6.QtWidgets.QGridLayout QGridLayout이 위젯을 그리드 구조로 배치하는 레이아웃 클래스임을 확인할 수 있습니다.
Layout Management Qt for Python - Layout Management Qt 레이아웃 시스템이 부모 위젯 안에서 자식 위젯을 자동 배치하는 구조를 확인할 수 있습니다.
Basic Layouts Example Qt for Python - Basic Layouts Example QBoxLayout, QGridLayout, QFormLayout 같은 기본 레이아웃 사용 예제를 확인할 수 있습니다.
Using .ui files Using .ui files from Designer or QtCreator Qt Designer에서 만든 .ui 파일을 PySide6 프로젝트에서 사용하는 방법을 확인할 수 있습니다.
pyside6-uic Qt for Python - pyside6-uic .ui 파일을 Python 코드 파일로 변환하는 명령 도구를 확인할 수 있습니다.

 

2. QGridLayout 공식 문서 연결

공식 문서에서 QGridLayout은 위젯을 그리드에 배치하는 레이아웃 클래스로 설명됩니다.

이번 예제에서 버튼들이 행과 열 위치에 맞춰 배치되는 이유가 바로 이 특징 때문입니다.

QGridLayout
    ↓
Grid 구조
    ↓
row, column 좌표 지정
    ↓
행과 열 위치에 위젯 배치

 

3. 이번 예제와 공식 문서 연결

이번 예제 코드 공식 문서와 연결되는 의미
QGridLayout(self) 그리드 레이아웃을 생성하고 현재 QWidget에 적용합니다.
layout.addWidget(b1, 0, 0) 첫 번째 버튼을 0행 0열에 배치합니다.
layout.addWidget(b2, 0, 1) 두 번째 버튼을 0행 1열에 배치합니다.
layout.addWidget(b3, 1, 0, 1, 2) 세 번째 버튼을 1행 0열에서 시작하여 1행 2열 크기로 배치합니다.
pyside6-uic form.ui -o ui_form.py Designer에서 만든 .ui 화면을 Python 코드 파일로 변환합니다.

4. 정리 흐름도

공식 문서 기준으로 정리하면 다음과 같습니다.

QWidget
    ↓
QGridLayout
    ↓
addWidget(widget, row, column)
    ↓
행과 열 위치에 위젯 배치
    ↓
필요하면 rowSpan, columnSpan으로 여러 칸 차지
    ↓
창 크기 변경 시 레이아웃이 위치와 크기 자동 관리

즉, QGridLayout은 PySide6에서 표 형태의 화면 구성을 만들 때 사용하는 기본 레이아웃입니다.