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

PySide6 QScrollArea에서 스크롤바 제어하기

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

PySide6 QScrollArea에서 스크롤바 제어하기

소개

PySide6에서 QScrollArea를 사용할 때, 스크롤바의 상태를 확인하고 제어하는 방법을 정리한 가이드입니다. 본 글에서는 다음과 같은 내용을 다룹니다:

  • 현재 생성된 스크롤바의 위치 확인 방법
  • QScrollArea에 스크롤바가 생성되었는지 확인하는 방법
  • 스크롤바가 없으면 생성하고, 스크롤이 가득 찬 상태로 설정하는 방법
  • 생성된 스크롤바의 최대값과 최소값 확인 방법
  • vertical_bar.setMinimum(0)이 동작하지 않을 때 해결 방법
  • 내부 위젯이 추가될 때 스크롤이 생겼는지 확인하는 방법
  • 가로 스크롤 없이 세로 스크롤만 항상 보이게 설정하는 방법

주요 개념 및 코드 예제

1. 현재 생성된 스크롤바의 위치 확인

scroll_area = QScrollArea()
vertical_bar = scroll_area.verticalScrollBar()
current_position = vertical_bar.value()
print(f"현재 스크롤 위치: {current_position}")

2. QScrollArea에 스크롤바가 생성됐는지 확인

if scroll_area.verticalScrollBar().isVisible():
    print("세로 스크롤바가 생성됨")
else:
    print("세로 스크롤바가 생성되지 않음")

3. 스크롤바가 없으면 생성하고 스크롤을 가득 찬 상태로 설정

scroll_area.setWidgetResizable(True)
scroll_area.verticalScrollBar().setValue(scroll_area.verticalScrollBar().maximum())
반응형

4. 생성된 스크롤바의 최소값과 최대값 확인

vertical_bar = scroll_area.verticalScrollBar()
print(f"최소값: {vertical_bar.minimum()}, 최대값: {vertical_bar.maximum()}")

5. vertical_bar.setMinimum(0)이 동작하지 않을 때 해결 방법

vertical_bar = scroll_area.verticalScrollBar()
vertical_bar.setMinimum(0)
vertical_bar.setRange(0, vertical_bar.maximum())  # 최소, 최대 범위를 다시 설정

6. 내부 위젯이 추가될 때 스크롤이 생겼는지 확인

if scroll_area.widget().sizeHint().height() > scroll_area.viewport().height():
    print("스크롤이 생성됨")
else:
    print("스크롤이 생성되지 않음")

7. 가로 스크롤 없이 세로 스크롤만 항상 보이게 설정

scroll_area.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
scroll_area.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOn)

정리된 테이블

기능 코드
현재 스크롤 위치 확인 vertical_bar.value()
스크롤바 생성 여부 확인 verticalScrollBar().isVisible()
스크롤바가 없으면 생성 setWidgetResizable(True)setValue(maximum())
스크롤바 최소/최대값 확인 minimum(), maximum()
setMinimum(0) 문제 해결 setRange(0, maximum())
내부 위젯 추가 후 스크롤 확인 sizeHint().height() > viewport().height()
세로 스크롤 항상 표시, 가로 스크롤 숨기기 setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff)setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOn)
반응형