1. QFormLayout:  라벨 + 입력 필드 폼 레이아웃

: “라벨 + 입력 위젯”을 2열 구조로 자동 배치해주는 레이아웃 공식문서

더보기

위젯 쌍(라벨—위젯) 기반 UI는 대부분 QFormLayout이 가장 깔끔합니다.

QFormLayout은 2열 구조(레이블/위젯) 를 손쉽게 만들 수 있고,
addRow("이름:", lineEdit) 처럼 문자열 + 위젯 조합도 가능.

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

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

        btn1, line1 = QPushButton("One"), QLineEdit()
        btn2, line2 = QPushButton("Two"), QLineEdit()
        btn3, line3 = QPushButton("Three"), QLineEdit()

        layout = QFormLayout(self)
        layout.addRow(btn1, line1)
        layout.addRow(btn2, line2)
        layout.addRow(btn3, line3)

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

 

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

더보기

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


 

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

더보기

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

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

 


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

 

 

 

0. 학습 목표

더보기

이번 6.5 단계에서는 PySide6에서 라벨과 입력 위젯을 한 줄씩 배치할 때 사용하는 QFormLayout을 학습합니다.

 

이전 단계에서 QHBoxLayout은 가로 방향, QVBoxLayout은 세로 방향, QGridLayout은 행과 열 기준의 2차원 배치라고 배웠습니다.

이번에는 입력 폼 화면에서 자주 사용하는 라벨 + 입력 필드 구조를 자동으로 정렬해 주는 폼 레이아웃을 살펴봅니다.

 

학습 목표 내용
QFormLayout 개념 이해 QFormLayout이 라벨과 입력 위젯을 2열 구조로 배치하는 레이아웃이라는 점을 이해합니다.
addRow() 구조 이해 addRow()를 사용해 한 줄에 라벨 역할의 위젯과 입력 위젯을 배치하는 방법을 이해합니다.
라벨-필드 구조 이해 왼쪽에는 설명 역할의 라벨, 오른쪽에는 입력 필드가 배치되는 구조를 이해합니다.
문자열 + 위젯 조합 이해 addRow("이름:", lineEdit)처럼 문자열과 위젯을 함께 사용할 수 있다는 점을 이해합니다.
Qt Designer 사용 흐름 이해 Qt Designer에서 여러 위젯을 선택한 뒤 Form Layout을 적용하는 흐름을 이해합니다.

이번 단계의 핵심
QFormLayout은 라벨 + 입력 위젯 형태의 폼 화면을 만들 때 사용하는 레이아웃입니다.

 

회원가입 화면, 로그인 정보 입력 화면, 설정 화면처럼 항목 이름과 입력칸이 함께 나오는 UI를 만들 때 자주 사용합니다.

1. QFormLayout이란?

더보기

1.1 QFormLayout의 기본 의미

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

QFormLayout은 이름 그대로 폼 화면을 만들 때 사용합니다.

 

이름 의미
Q Qt에서 제공하는 클래스라는 의미입니다.
Form 사용자가 정보를 입력하는 폼 화면을 의미합니다.
Layout 위젯의 위치와 크기를 자동으로 관리하는 배치 구조를 의미합니다.
QFormLayout
    ↓
Form Layout
    ↓
라벨과 입력 위젯을 한 줄씩 2열 구조로 배치하는 레이아웃

따라서 QFormLayout은 입력 화면을 깔끔하게 정렬할 때 사용하는 레이아웃입니다.

 

1.2 QFormLayout이 필요한 경우

GUI 화면에서는 사용자가 값을 입력해야 하는 경우가 많습니다.

이때 입력창만 놓으면 사용자가 무엇을 입력해야 하는지 알기 어렵습니다.

그래서 보통 왼쪽에는 항목 이름을 표시하고, 오른쪽에는 입력 위젯을 배치합니다.

 

사용 예시 설명
로그인 화면 아이디, 비밀번호 라벨과 입력창을 한 줄씩 배치할 때 사용합니다.
회원가입 화면 이름, 이메일, 전화번호 같은 항목과 입력창을 정렬할 때 사용합니다.
설정 화면 설정 이름과 설정 값을 입력하거나 선택하는 위젯을 배치할 때 사용합니다.
데이터 입력 폼 항목명과 입력 필드를 일정한 간격으로 정렬할 때 사용합니다.

중요한 점
QFormLayout은 단순히 위젯을 위에서 아래로 배치하는 레이아웃이 아닙니다.

한 줄을 라벨 영역입력 필드 영역으로 나누어 배치하는 폼 전용 레이아웃입니다.

2. QFormLayout 기본 구조

더보기

2.1 기본 사용 흐름

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

부모 위젯 생성
    ↓
라벨 역할 위젯 또는 문자열 준비
    ↓
입력 위젯 준비
    ↓
QFormLayout 생성
    ↓
addRow()로 한 줄씩 추가
    ↓
라벨 + 입력 필드 구조로 자동 배치

QFormLayout에서 가장 중요한 메서드는 addRow()입니다.

addRow()는 폼 레이아웃에 한 줄을 추가합니다.

 

2.2 addRow()의 기본 구조

QFormLayout에서 한 줄을 추가하는 기본 구조는 다음과 같습니다.

layout.addRow(라벨, 입력위젯)

예를 들어 다음 코드는 왼쪽에는 버튼을, 오른쪽에는 입력창을 배치합니다.

layout.addRow(btn1, line1)
인자 의미
btn1 왼쪽 열에 배치되는 라벨 역할의 위젯입니다.
line1 오른쪽 열에 배치되는 입력 위젯입니다.
QFormLayout

[ One ]    [ QLineEdit ]
[ Two ]    [ QLineEdit ]
[ Three ]  [ QLineEdit ]

중요한 점
QFormLayout은 한 줄을 두 영역으로 나누어 배치합니다.

왼쪽은 설명 또는 라벨 역할, 오른쪽은 실제 입력 위젯 역할을 합니다.

2.3 문자열 + 위젯 조합

QFormLayout은 문자열과 입력 위젯을 함께 사용할 수도 있습니다.

이 경우 문자열은 라벨처럼 사용됩니다.

layout.addRow("이름:", QLineEdit())
layout.addRow("이메일:", QLineEdit())
layout.addRow("전화번호:", QLineEdit())

초보자 입장에서는 이 방식이 더 직관적일 수 있습니다.

QFormLayout

이름:       [ 입력창 ]
이메일:     [ 입력창 ]
전화번호:   [ 입력창 ]

즉, QFormLayout은 라벨 위젯을 직접 만들 수도 있고, 문자열을 전달해서 간단하게 폼 구조를 만들 수도 있습니다.

 

2.4 QFormLayout과 QGridLayout 비교

QFormLayout은 내부적으로 보면 2열 구조이기 때문에 QGridLayout과 비슷해 보일 수 있습니다.

하지만 목적이 다릅니다.

 

구분 QGridLayout QFormLayout
기본 목적 행과 열 위치에 자유롭게 배치 라벨과 입력 필드를 한 줄씩 배치
구조 여러 행과 여러 열을 자유롭게 구성 기본적으로 라벨 열 + 필드 열 구조
주요 메서드 addWidget(widget, row, column) addRow(label, field)
대표 예시 계산기 버튼, 대시보드 카드 회원가입 폼, 설정 폼

정리
표처럼 자유롭게 배치해야 하면 QGridLayout을 사용합니다.

라벨과 입력창이 한 쌍으로 반복되는 폼 화면이라면 QFormLayout이 더 깔끔합니다.

3. 예제 코드

더보기

3.1 실습 준비

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

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

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

 

3.2 main.py 예제 코드

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

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

        self.setWindowTitle("QFormLayout 예제")
        self.resize(360, 160)

        btn1, line1 = QPushButton("One"), QLineEdit()
        btn2, line2 = QPushButton("Two"), QLineEdit()
        btn3, line3 = QPushButton("Three"), QLineEdit()

        layout = QFormLayout(self)
        layout.addRow(btn1, line1)
        layout.addRow(btn2, line2)
        layout.addRow(btn3, line3)

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

 

이 예제는 버튼 3개와 입력창 3개를 만들고, QFormLayout을 사용해 한 줄씩 배치합니다.

FormExample(QWidget)
    ↓
QPushButton("One")   + QLineEdit()
QPushButton("Two")   + QLineEdit()
QPushButton("Three") + QLineEdit()
    ↓
QFormLayout(self)
    ↓
addRow()로 한 줄씩 폼 구조 생성

 

3.3 실행 결과 구조

프로그램을 실행하면 창 안에 버튼과 입력창이 2열 구조로 배치됩니다.

┌──────────────────────────────────────┐
│  [ One ]      [ 입력창             ]  │
│                                      │
│  [ Two ]      [ 입력창             ]  │
│                                      │
│  [ Three ]    [ 입력창             ]  │
└──────────────────────────────────────┘

왼쪽 열에는 버튼이 배치되고, 오른쪽 열에는 QLineEdit 입력창이 배치됩니다.

이 구조는 실제 프로그램에서는 보통 왼쪽에 QLabel, 오른쪽에 QLineEdit을 배치하는 방식으로 많이 사용합니다.

 

3.4 문자열 라벨을 사용하는 예

실제 입력 폼에서는 버튼보다 문자열 라벨을 사용하는 경우가 더 많습니다.

layout = QFormLayout(self)
layout.addRow("이름:", QLineEdit())
layout.addRow("이메일:", QLineEdit())
layout.addRow("전화번호:", QLineEdit())

이렇게 작성하면 왼쪽에는 항목 이름이 표시되고, 오른쪽에는 입력창이 배치됩니다.

이름:       [ 입력창 ]
이메일:     [ 입력창 ]
전화번호:   [ 입력창 ]

 

3.5 예제 파일

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

 


4. 코드 분석

더보기

4.1 주석 포함 전체 코드

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

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

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

        btn1, line1 = QPushButton("One"), QLineEdit()         # [8] 첫 번째 줄에 사용할 버튼과 입력창 생성
        btn2, line2 = QPushButton("Two"), QLineEdit()         # [9] 두 번째 줄에 사용할 버튼과 입력창 생성
        btn3, line3 = QPushButton("Three"), QLineEdit()       # [10] 세 번째 줄에 사용할 버튼과 입력창 생성

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

        layout.addRow(btn1, line1)                           # [12] 첫 번째 줄에 btn1과 line1을 배치
        layout.addRow(btn2, line2)                           # [13] 두 번째 줄에 btn2와 line2를 배치
        layout.addRow(btn3, line3)                           # [14] 세 번째 줄에 btn3와 line3을 배치

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

 

4.2 단계별 분석

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

from PySide6.QtWidgets import (
    QApplication, QWidget, QPushButton,
    QLineEdit, QFormLayout
)

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

클래스 역할
QApplication Qt GUI 프로그램 전체 실행을 관리합니다.
QWidget 화면에 표시되는 기본 창을 만듭니다.
QPushButton 클릭 가능한 버튼을 만듭니다.
QLineEdit 한 줄 텍스트를 입력할 수 있는 입력창을 만듭니다.
QFormLayout 라벨 역할 위젯과 입력 위젯을 한 줄씩 배치합니다.

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

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

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

이 클래스 안에서 버튼, 입력창, QFormLayout을 생성합니다.

 

3단계: 버튼과 입력창 만들기

btn1, line1 = QPushButton("One"), QLineEdit()
btn2, line2 = QPushButton("Two"), QLineEdit()
btn3, line3 = QPushButton("Three"), QLineEdit()

각 줄에 들어갈 버튼과 입력창을 한 쌍씩 생성합니다.

이번 예제에서는 버튼이 왼쪽 열에 배치되고, QLineEdit 입력창이 오른쪽 열에 배치됩니다.

btn1 + line1
btn2 + line2
btn3 + line3

 

4단계: QFormLayout 생성하기

layout = QFormLayout(self)

QFormLayout 객체를 생성합니다.

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

self
    ↓
현재 FormExample 창
    ↓
QFormLayout(self)
    ↓
현재 창의 폼 레이아웃으로 적용

 

5단계: addRow()로 한 줄씩 추가하기

layout.addRow(btn1, line1)
layout.addRow(btn2, line2)
layout.addRow(btn3, line3)

addRow()는 QFormLayout에 한 줄을 추가하는 메서드입니다.

각 줄은 왼쪽 열과 오른쪽 열로 나누어 배치됩니다.

layout.addRow(btn1, line1)  →  [ One ]    [ line1 ]
layout.addRow(btn2, line2)  →  [ Two ]    [ line2 ]
layout.addRow(btn3, line3)  →  [ Three ]  [ line3 ]

중요한 점
QFormLayout에서는 addWidget()보다 addRow()를 중심으로 이해하는 것이 좋습니다.

addRow()는 폼 화면에 한 줄씩 라벨과 입력 위젯을 추가하는 역할을 합니다.

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

더보기

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

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

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

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

Form(QWidget)
    └── formLayout
            ├── QLabel / QPushButton
            ├── QLineEdit
            ├── QLabel / QPushButton
            ├── QLineEdit
            ├── QLabel / QPushButton
            └── QLineEdit

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

Designer 화면에서는 선택한 위젯들이 라벨 열과 입력 필드 열 구조로 정렬된 것처럼 보일 수 있습니다.

 

중요한 점

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

 

겉으로는 입력 폼 영역이 생긴 것처럼 보이지만, 실제 역할은 선택한 위젯들을 라벨-필드 구조로 정렬하는 배치 관리자입니다.

5.2 이 상태의 의미

예를 들어 라벨 3개와 입력창 3개를 선택하고 Lay Out in a Form Layout을 누르면 다음처럼 정렬됩니다.

[ 이름: ]      [ QLineEdit ]

[ 이메일: ]    [ QLineEdit ]

[ 전화번호: ]  [ QLineEdit ]

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

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

 

구분 설명
적용 대상 선택한 위젯들
생성되는 구조 선택한 위젯들을 관리하는 QFormLayout
폼 전체 관리 여부 아직 폼 전체를 관리하는 최상위 레이아웃은 아님
주요 목적 일부 위젯들을 라벨-입력 필드 구조로 정렬하기

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

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

6. Qt Break Layout을 한 경우

더보기

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

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

앞에서 여러 위젯을 QFormLayout으로 묶었다면, Break Layout을 실행하면 그 묶음이 풀립니다.

Break Layout 전

Form(QWidget)
    └── formLayout
            ├── QLabel
            ├── QLineEdit
            ├── QLabel
            ├── QLineEdit
            ├── QLabel
            └── QLineEdit
Break Layout 후

Form(QWidget)
    ├── QLabel
    ├── QLineEdit
    ├── QLabel
    ├── QLineEdit
    ├── QLabel
    └── QLineEdit

위젯 자체가 삭제되는 것은 아닙니다.

삭제되는 것은 위젯들을 관리하던 QFormLayout 구조입니다.

 

6.2 Break Layout 후 화면 상태

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

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

 

Break Layout 전

[ 이름: ]      [ QLineEdit ]
[ 이메일: ]    [ QLineEdit ]
[ 전화번호: ]  [ QLineEdit ]
          ↑
QFormLayout이 라벨-입력 필드 배치를 관리함
Break Layout 후

[ 이름: ]   [ QLineEdit ]   [ 이메일: ]   [ QLineEdit ]   [ 전화번호: ]   [ QLineEdit ]
    ↑          ↑          ↑          ↑             ↑          ↑
각 위젯이 폼 위에 따로 놓인 상태

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

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

 

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

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

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

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

더보기

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

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

그리고 Lay Out in a Form Layout을 누르면 폼 전체에 QFormLayout이 적용됩니다.



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

Form(QWidget)
    └── Top-Level QFormLayout
            ├── QLabel
            ├── QLineEdit
            ├── QLabel
            ├── QLineEdit
            ├── QLabel
            └── QLineEdit

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

layout = QFormLayout(self)

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

layout = QFormLayout()
self.setLayout(layout)

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

 

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

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

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

 

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

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

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

1. 라벨과 입력창 여러 개를 선택한다.
2. Lay Out in a Form Layout을 누른다.
   → 선택한 위젯들만 QFormLayout으로 묶인다.

3. Break Layout을 누른다.
   → 폼 레이아웃 묶음이 해제된다.

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

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

 

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

 

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

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

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

8. 정리

더보기

이번 단계에서는 PySide6에서 라벨과 입력 위젯을 2열 구조로 배치하는 QFormLayout을 살펴보았습니다.

QFormLayout은 입력 폼 화면을 만들 때 특히 유용합니다.

 

라벨 역할 위젯 또는 문자열 준비
    ↓
입력 위젯 준비
    ↓
QFormLayout 생성
    ↓
addRow()로 한 줄씩 추가
    ↓
라벨 + 입력 필드 구조로 자동 배치
    ↓
창 크기 변경 시 자동 재배치
개념 정리
QFormLayout 라벨과 입력 위젯을 2열 구조로 배치하는 폼 레이아웃입니다.
addRow() 폼 레이아웃에 한 줄을 추가하는 메서드입니다.
라벨 영역 왼쪽 열에 배치되며, 입력 항목의 이름이나 설명을 표시합니다.
필드 영역 오른쪽 열에 배치되며, 실제 입력 위젯이 들어갑니다.
문자열 + 위젯 addRow("이름:", lineEdit)처럼 문자열과 입력 위젯을 함께 사용할 수 있습니다.
Qt Designer 방식 위젯을 선택한 뒤 Lay Out in a Form Layout을 적용하여 폼 레이아웃을 만듭니다.

이번 단계에서 기억할 문장
QFormLayout은 라벨과 입력 위젯을 한 줄씩 정렬하는 폼 전용 레이아웃입니다.

 

코드에서는 addRow()를 사용하고, Qt Designer에서는 Lay Out in a Form Layout을 적용해 같은 구조를 만들 수 있습니다.

 

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

더보기

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

 

특히 이번 단계에서 중요한 부분은 QFormLayout이 입력 위젯과 연결된 라벨을 2열 폼 구조로 배치하는 레이아웃이라는 점입니다.

 

1. 공식 문서 참고 표

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

 

2. QFormLayout 공식 문서 연결

공식 문서에서 QFormLayout은 입력 위젯과 연결된 라벨을 관리하는 폼 레이아웃 클래스로 설명됩니다.

이번 예제에서 버튼과 입력창이 한 줄씩 짝을 이루어 배치되는 이유가 바로 이 특징 때문입니다.

QFormLayout
    ↓
2열 폼 구조
    ↓
왼쪽: 라벨 또는 설명 위젯
오른쪽: 입력 필드 위젯
    ↓
addRow()로 한 줄씩 추가

 

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

이번 예제 코드 공식 문서와 연결되는 의미
QFormLayout(self) 폼 레이아웃을 생성하고 현재 QWidget에 적용합니다.
QLineEdit() 폼의 오른쪽 열에 들어갈 입력 필드 위젯을 생성합니다.
layout.addRow(btn1, line1) 첫 번째 줄에 라벨 역할 위젯과 입력 위젯을 함께 배치합니다.
layout.addRow("이름:", lineEdit) 문자열 라벨과 입력 위젯을 한 줄에 배치할 수 있습니다.
pyside6-uic form.ui -o ui_form.py Designer에서 만든 .ui 화면을 Python 코드 파일로 변환합니다.

4. 정리 흐름도

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

QWidget
    ↓
QFormLayout
    ↓
addRow(label, field)
    ↓
라벨과 입력 위젯을 한 줄에 배치
    ↓
여러 줄을 추가하여 입력 폼 화면 구성
    ↓
창 크기 변경 시 레이아웃이 위치와 크기 자동 관리

즉, QFormLayout은 PySide6에서 입력 폼 화면을 만들 때 사용하는 대표적인 폼 전용 레이아웃입니다.