본문 바로가기
코딩취미/Python

PySide6로 QGroupBox를 스크롤 가능하게 만드는 방법

by 브링블링 2025. 2. 18.
반응형

PySide6로 QGroupBox를 스크롤 가능하게 만드는 방법

📖 소개

PySide6를 사용해 GUI 애플리케이션을 개발할 때, QGroupBox에 많은 내용을 담으면 창 크기에 따라 내용이 잘릴 수 있습니다. 이를 해결하기 위해 QScrollArea를 사용하여 QGroupBox를 스크롤 가능하게 만드는 방법을 초보자도 이해할 수 있도록 자세히 설명합니다.

🛠️ 준비사항

  1. Python 설치 (3.10 이상 권장)
  2. PySide6 라이브러리 설치
pip install PySide6

🎯 핵심 개념: QScrollArea

QScrollArea는 내부에 다른 위젯을 포함하여 스크롤할 수 있도록 도와주는 컨테이너 위젯입니다. 이를 활용하면 QGroupBox의 크기가 창 크기에 맞춰 스크롤되도록 설정할 수 있습니다.

📝 코드 구현 예제

from PySide6.QtWidgets import (
    QApplication, QMainWindow, QWidget, QVBoxLayout, QGroupBox, QLabel,
    QScrollArea, QSpacerItem, QSizePolicy
)
from PySide6.QtCore import Qt

class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()

        self.setWindowTitle("Scrollable QGroupBox Example")
        self.resize(800, 600)

        # 메인 위젯 및 레이아웃 설정
        main_widget = QWidget()
        self.layout = QVBoxLayout(main_widget)

        # QGroupBox 생성
        group_box_pll = QGroupBox("PLL Settings")
        group_box_pll.setStyleSheet("QGroupBox { border: 1px solid lightgray; border-radius: 0px; }")

        # 내부 레이아웃
        v_box_pll = QVBoxLayout()
        lblPllSection = QLabel("PLL Section")
        lblPllTable = QLabel("PLL Table")

        v_box_pll.addWidget(lblPllSection)
        v_box_pll.addWidget(lblPllTable, alignment=Qt.AlignHCenter | Qt.AlignVCenter)

        # 스크롤 테스트용 스페이서 추가
        for i in range(20):
            v_box_pll.addWidget(QLabel(f"Parameter {i+1}"))

        group_box_pll.setLayout(v_box_pll)

        # QScrollArea 생성 및 설정
        scroll_area = QScrollArea()
        scroll_area.setWidget(group_box_pll)
        scroll_area.setWidgetResizable(True)
        scroll_area.setVerticalScrollBarPolicy(Qt.ScrollBarAsNeeded)
        scroll_area.setHorizontalScrollBarPolicy(Qt.ScrollBarAsNeeded)

        # 메인 레이아웃에 스크롤 영역 추가
        self.layout.addWidget(scroll_area)
        main_widget.setLayout(self.layout)
        self.setCentralWidget(main_widget)

if __name__ == "__main__":
    app = QApplication([])
    window = MainWindow()
    window.show()
    app.exec()
반응형

🧐 코드 설명

코드 부분 설명
QGroupBox 그룹화된 UI 요소를 나타내는 위젯입니다.
QScrollArea 스크롤 기능을 제공하는 컨테이너입니다.
setWidgetResizable(True) 창 크기에 맞춰 내부 위젯이 자동 조정됩니다.
addWidget(QLabel) 테스트용으로 여러 레이블을 추가하여 스크롤 동작을 확인합니다.

⚠️ 주의사항 및 팁

  1. 레이아웃 구성: QVBoxLayout을 사용할 때 과도한 위젯 추가는 성능에 영향을 줄 수 있습니다.
  2. 스타일 적용: QGroupBox의 경계선이나 스타일은 setStyleSheet을 사용하여 자유롭게 변경 가능합니다.
  3. 스크롤 정책: setVerticalScrollBarPolicy(Qt.ScrollBarAsNeeded)를 통해 필요할 때만 스크롤바를 표시할 수 있습니다.

🏁 실행 결과

  • 창의 크기가 작아지면 QGroupBox에 자동으로 세로 스크롤바가 나타납니다.
  • 창을 다시 크게 키우면 스크롤바가 사라지고 내용이 정상적으로 표시됩니다.
반응형