- 주요 레이아웃2026년 05월 26일
- 소쩍소쩍이
- 작성자
- 2026.05.26.:50
PySide6 레이아웃 확장 기능 정리
PySide6에서는 단순히 위젯을 배치하는 것뿐 아니라 공간을 어떻게 나눌지까지 제어할 수 있다.
대표적으로 Stretch Factor, SpacerItem, SizePolicy를 사용해 레이아웃의 크기와 여백을 조절한다.
Stretch Factor
Stretch Factor는 레이아웃 안의 남는 공간을 각 위젯에게 어떤 비율로 나눠줄지 결정하는 값
위젯 자체의 크기를 직접 지정하는 것이 아니라,
레이아웃 내부에서 남는 공간을 얼마나 가져갈지를 비율로 정한다.import sys from PySide6.QtWidgets import ( QApplication, QWidget, QPushButton, QHBoxLayout ) class StretchFactor(QWidget): def __init__(self): super().__init__() self.setWindowTitle("Stretch Factor 예제") btn1 = QPushButton("버튼 1 (비율1)") btn2 = QPushButton("버튼 2 (비율2)") btn3 = QPushButton("버튼 3 (비율1)") layout = QHBoxLayout(self) layout.addWidget(btn1, stretch=1) layout.addWidget(btn2, stretch=2) layout.addWidget(btn3, stretch=1) if __name__ == "__main__": app = QApplication(sys.argv) w = StretchFactor() w.show() sys.exit(app.exec())위 예제에서는 버튼의 비율이 1 : 2 : 1로 설정된다.

창 크기를 늘리면 가운데 버튼이 더 넓게 확장되는 것을 볼 수 있다.
Stretch 비율 예시
1 : 1 → 동일한 크기 비율
1 : 2 → 두 번째 위젯이 2배 더 넓음
1 : 3 : 1 → 가운데 위젯이 가장 넓게 확장
SpacerItem
SpacerItem은 레이아웃 안에 늘어나는 빈 공간을 넣을 때 사용
버튼 사이 또는 좌우 공간을 자연스럽게 띄우고 싶을 때 많이 사용한다.
사실상 보이지 않는 위젯처럼 동작한다고 생각하면 이해하기 쉽다.
import sys from PySide6.QtWidgets import ( QApplication, QWidget, QPushButton, QHBoxLayout, QSpacerItem, QSizePolicy ) class SpacerExample(QWidget): def __init__(self): super().__init__() self.setWindowTitle("SpacerItem 예제") btn1 = QPushButton("왼쪽 버튼") btn2 = QPushButton("오른쪽 버튼") layout = QHBoxLayout(self) layout.addWidget(btn1) # 가운데에 늘어나는 빈 공간 추가 spacer = QSpacerItem( 40, 20, QSizePolicy.Expanding, QSizePolicy.Minimum ) layout.addItem(spacer) layout.addWidget(btn2) if __name__ == "__main__": app = QApplication(sys.argv) w = SpacerExample() w.show() sys.exit(app.exec())
QSpacerItem 주요 옵션
QSizePolicy.Expanding → 가능한 공간을 최대한 차지
QSizePolicy.Minimum → 최소 크기만 유지
SizePolicy
SizePolicy는 위젯이 공간을 어떻게 사용할지 결정하는 정책
가로는 늘어나게 하고 세로는 고정하거나,
반대로 세로만 늘어나게 하는 등의 설정이 가능하다.import sys from PySide6.QtWidgets import ( QApplication, QWidget, QPushButton, QVBoxLayout, QSizePolicy ) class SizePolicyExample(QWidget): def __init__(self): super().__init__() self.setWindowTitle("SizePolicy 예제") btn = QPushButton("가로는 Expanding / 세로는 Fixed") # 가로: 확대됨 # 세로: 고정 btn.setSizePolicy( QSizePolicy.Expanding, QSizePolicy.Fixed ) layout = QVBoxLayout(self) layout.addWidget(btn) if __name__ == "__main__": app = QApplication(sys.argv) w = SizePolicyExample() w.show() sys.exit(app.exec())setSizePolicy()는 가로와 세로 방향의 동작을 각각 설정한다.
btn.setSizePolicy( QSizePolicy.Expanding, QSizePolicy.Fixed )- 가로 방향(Horizontal) : Expanding
→ 가능한 만큼 넓어진다. - 세로 방향(Vertical) : Fixed
→ 세로 높이는 유지한다.

자주 사용하는 SizePolicy
Fixed → 크기 고정
Minimum → 최소 크기 유지
Preferred → 기본 권장 크기 사용
Expanding → 가능한 만큼 확장'PySide6 > Layout' 카테고리의 다른 글
QScrollArea (0) 2026.05.26 QTabWidget (0) 2026.05.26 NestedLayout (0) 2026.05.26 QFormLayout (0) 2026.05.26 QGridLayout (0) 2026.05.26 다음글이전글이전 글이 없습니다.댓글
스킨 업데이트 안내
현재 이용하고 계신 스킨의 버전보다 더 높은 최신 버전이 감지 되었습니다. 최신버전 스킨 파일을 다운로드 받을 수 있는 페이지로 이동하시겠습니까?
("아니오" 를 선택할 시 30일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)