• 티스토리 홈
  • 프로필사진
    소쩍소쩍이
  • 방명록
  • 공지사항
  • 태그
  • 블로그 관리
  • 글 작성
소쩍소쩍이
  • 프로필사진
    소쩍소쩍이
    • 분류 전체보기 (51) N
      • 파이썬 (18)
        • 문제 및 예제 (8)
      • PySide6 (15) N
        • Signal & Slot (6)
        • Layout (8)
        • Model & View (1) N
      • 리눅스 (5)
      • 아두이노 (0)
      • 일지 (11)
  • GitHub
  • 방문자 수
    • 전체:
    • 오늘:
    • 어제:
  • 최근 댓글
      등록된 댓글이 없습니다.
    # Home
    # 공지사항
    #
    # 태그
    # 검색결과
    # 방명록
    • 주요 레이아웃
      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일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)
    목차
    표시할 목차가 없습니다.
      • 안녕하세요
      • 감사해요
      • 잘있어요

      티스토리툴바