6.7 주요 레이아웃 기능 살펴보기
728x90

1. Stretch Factor 예제
: 레이아웃 안의 남는 여유 공간을, 각 위젯에게 “어떤 비율로 나눠줄지” 결정하는 값
더보기


import sys
from PySide6.QtWidgets import QApplication, QWidget, QPushButton, QHBoxLayout
class StretchExample(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 = StretchExample()
w.show()
sys.exit(app.exec())
위젯 자체의 크기를 지정하는 게 아니라, 레이아웃 안에서 위젯들 사이·주변에 생기는 여유 공간을 어떻게 배분할지를 정하는 겁니다. 전체 여유 공간을 1 : 2 : 1 로 나눠서
- btn1 주변 영역 → 1
- btn2 주변 영역 → 2
- btn3 주변 영역 → 1
만큼 “비율”로 공간을 주는 효과입니다.
결과적으로 가운데 버튼이 양옆보다 더 넓게 보이는 UI가 됩니다.
2. 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도 사실상 SizePolicy를 가진 하나의 “보이지 않는 위젯”처럼 행동한다
3. 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())
윈도우를 가로로 키우면 버튼 너비는 늘어나는데, 버튼 높이는 거의 변하지 않습니다.
btn.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed)
- 가로 방향(Horizontal): Expanding
: 가능하면 옆으로 쭉쭉 넓어져도 좋다 - 세로 방향(Vertical): Fixed
: 세로 높이는 가능한 한 그대로 유지하고 싶다
비교
- Stretch는 “남는 공간을 누구에게 얼마나 줄까?”
- SizePolicy는 “공간을 받았을 때, 나는 커질 준비가 되어 있나?”
를 결정하는 역할입니다.