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는 “공간을 받았을 때, 나는 커질 준비가 되어 있나?”

를 결정하는 역할입니다.