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

PySide6에서 윈도우 크기 자동 조절 기능 구현하기

by 브링블링 2025. 3. 3.
반응형

PySide6에서 윈도우 크기 자동 조절 기능 구현하기

PySide6는 Python에서 Qt를 활용하여 GUI 애플리케이션을 개발할 수 있도록 돕는 라이브러리입니다. 윈도우 크기를 자동으로 조절하는 기능은 가변적인 레이아웃을 지원해야 하는 애플리케이션에서 필수적인 요소입니다. 이 글에서는 PySide6에서 윈도우 크기를 자동으로 조절하는 방법을 설명하고, 필요한 기술 스택과 사용법을 예제와 함께 소개하겠습니다.


PySide6에서 윈도우 크기 자동 조절을 위한 기술 스택

설명
PySide6 Qt 기반의 Python GUI 프레임워크
QWidget 모든 UI 요소의 기본 클래스, 윈도우 크기 조절 가능
QVBoxLayout / QHBoxLayout 위젯 배치를 자동 조정하는 레이아웃 시스템
QSizePolicy 위젯 크기 정책을 설정하여 자동 조절 가능
resizeEvent 윈도우 크기 변경을 감지하여 UI 업데이트
QSplitter 사용자가 직접 크기를 조정할 수 있는 위젯 제공

윈도우 크기 자동 조절 구현 방법

1. QVBoxLayoutQHBoxLayout을 활용한 자동 크기 조절

PySide6에서는 QVBoxLayoutQHBoxLayout을 사용하여 위젯 크기를 자동으로 조정할 수 있습니다.

✅ 예제 코드: QVBoxLayout을 사용한 자동 크기 조절

from PySide6.QtWidgets import QApplication, QWidget, QVBoxLayout, QPushButton
import sys

class AutoResizeWindow(QWidget):
    def __init__(self):
        super().__init__()
        self.init_ui()
    
    def init_ui(self):
        layout = QVBoxLayout()
        
        btn1 = QPushButton("버튼 1")
        btn2 = QPushButton("버튼 2")
        
        layout.addWidget(btn1)
        layout.addWidget(btn2)
        
        self.setLayout(layout)
        self.setWindowTitle("자동 크기 조절 예제")
        self.resize(400, 300)  # 초기 크기 설정

if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = AutoResizeWindow()
    window.show()
    sys.exit(app.exec())

 

설명:

  • QVBoxLayout을 사용하여 버튼이 창 크기에 맞게 자동으로 정렬됩니다.
  • 창 크기가 조정되면 내부 위젯도 이에 맞춰 자동 조정됩니다.

2. QSizePolicy를 활용한 윈도우 크기 조절

PySide6에서는 QSizePolicy를 활용하여 개별 위젯의 크기 정책을 설정할 수 있습니다.

✅ 예제 코드: QSizePolicy 적용

from PySide6.QtWidgets import QApplication, QWidget, QVBoxLayout, QPushButton, QSizePolicy
import sys

class AutoResizeWindow(QWidget):
    def __init__(self):
        super().__init__()
        self.init_ui()
    
    def init_ui(self):
        layout = QVBoxLayout()
        
        btn = QPushButton("크기가 자동으로 조정되는 버튼")
        btn.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding)
        
        layout.addWidget(btn)
        self.setLayout(layout)
        self.setWindowTitle("QSizePolicy 적용 예제")
        self.resize(400, 300)

if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = AutoResizeWindow()
    window.show()
    sys.exit(app.exec())

 

설명:

  • setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding)을 적용하여 버튼이 창 크기에 따라 자동으로 변경됩니다.
반응형

3. resizeEvent를 활용하여 동적으로 크기 조절

resizeEvent를 사용하면 창 크기가 변경될 때 특정 동작을 실행할 수 있습니다.

✅ 예제 코드: resizeEvent 활용

from PySide6.QtWidgets import QApplication, QWidget, QLabel
import sys

class ResizeEventExample(QWidget):
    def __init__(self):
        super().__init__()
        self.label = QLabel("창 크기를 조정해보세요!", self)
        self.label.setGeometry(10, 10, 200, 50)
        self.setWindowTitle("resizeEvent 예제")
        self.resize(400, 300)
    
    def resizeEvent(self, event):
        self.label.setText(f"윈도우 크기: {self.width()} x {self.height()}")
        super().resizeEvent(event)

if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = ResizeEventExample()
    window.show()
    sys.exit(app.exec())

설명:

  • resizeEvent를 오버라이드하여 창 크기가 변경될 때마다 QLabel의 텍스트를 업데이트합니다.

주의할 사항

위젯이 레이아웃 안에 포함되어 있어야 자동 크기 조정이 원활히 작동QSizePolicy를 올바르게 설정하여 예상치 못한 크기 고정을 방지비율을 고려한 레이아웃 설계 필요 (QSplitter 활용 가능) ✅ resizeEvent 사용 시 성능 고려 (불필요한 업데이트 방지)


반응형