본문 바로가기
프로그래밍/python

Qsplitter 의 모든 기능과 사용법

by 마루의 일상 2024. 5. 24.
728x90
반응형

PyQt5의 QSplitter는 사용자가 위젯의 크기를 조절할 수 있게 해주는 위젯입니다. QSplitter는 주로 창을 여러 영역으로 나누고, 사용자가 각 영역의 크기를 드래그하여 조절할 수 있도록 하는 데 사용됩니다. 

QSplitter 개요

QSplitter는 PyQt5에서 제공하는 레이아웃 위젯 중 하나로, 여러 자식 위젯을 수평 또는 수직으로 배치할 수 있게 해줍니다. 사용자는 이 위젯을 통해 각 자식 위젯의 크기를 드래그하여 조절할 수 있습니다.

기본 사용법

QSplitter를 사용하려면 PyQt5 모듈을 임포트하고, QSplitter 객체를 생성한 후, 자식 위젯을 추가하면 됩니다.

import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QSplitter, QTextEdit
from PyQt5.QtCore import Qt

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

        self.setWindowTitle('QSplitter Example')

        # QSplitter 생성
        splitter = QSplitter(Qt.Horizontal)

        # QTextEdit 위젯 생성 및 추가
        text_edit1 = QTextEdit()
        text_edit2 = QTextEdit()
        text_edit3 = QTextEdit()

        splitter.addWidget(text_edit1)
        splitter.addWidget(text_edit2)
        splitter.addWidget(text_edit3)

        self.setCentralWidget(splitter)

app = QApplication(sys.argv)
window = MainWindow()
window.show()
sys.exit(app.exec_())

주요 메서드와 속성

  • addWidget(widget): QSplitter에 자식 위젯을 추가합니다.
  • setOrientation(orientation): QSplitter의 방향을 설정합니다. Qt.Horizontal 또는 Qt.Vertical을 사용할 수 있습니다.
  • setSizes(sizes): QSplitter의 각 위젯 크기를 설정합니다.
  • sizes(): 현재 QSplitter의 각 위젯 크기를 반환합니다.
  • setHandleWidth(width): QSplitter 핸들의 너비를 설정합니다.
  • handleWidth(): 현재 QSplitter 핸들의 너비를 반환합니다.
  • setStretchFactor(index, stretch): 특정 인덱스의 위젯에 대한 스트레치 팩터를 설정합니다. 큰 값일수록 더 많은 공간을 차지합니다.

예제 코드

다양한 QSplitter 기능을 사용하는 예제 코드를 살펴보겠습니다.

import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QSplitter, QTextEdit, QVBoxLayout, QWidget
from PyQt5.QtCore import Qt

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

        self.setWindowTitle('QSplitter Example')

        # QSplitter 생성 및 방향 설정
        splitter = QSplitter(Qt.Vertical)

        # QTextEdit 위젯 생성
        text_edit1 = QTextEdit()
        text_edit2 = QTextEdit()
        text_edit3 = QTextEdit()

        # QSplitter에 위젯 추가
        splitter.addWidget(text_edit1)
        splitter.addWidget(text_edit2)
        splitter.addWidget(text_edit3)

        # 초기 크기 설정
        splitter.setSizes([100, 200, 100])

        # 핸들 너비 설정
        splitter.setHandleWidth(10)

        # 스트레치 팩터 설정
        splitter.setStretchFactor(0, 1)
        splitter.setStretchFactor(1, 2)
        splitter.setStretchFactor(2, 1)

        # 레이아웃 설정
        layout = QVBoxLayout()
        layout.addWidget(splitter)

        # 메인 위젯 설정
        container = QWidget()
        container.setLayout(layout)
        self.setCentralWidget(container)

app = QApplication(sys.argv)
window = MainWindow()
window.show()
sys.exit(app.exec_())

QSplitter의 시그널

QSplitter는 사용자가 위젯의 크기를 변경할 때 시그널을 발생시킵니다.

  • splitterMoved(int pos, int index): 사용자가 스플리터를 이동할 때 발생합니다. pos는 핸들의 위치, index는 이동된 핸들의 인덱스입니다.
class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()

        self.setWindowTitle('QSplitter Example with Signal')

        splitter = QSplitter(Qt.Horizontal)

        text_edit1 = QTextEdit()
        text_edit2 = QTextEdit()

        splitter.addWidget(text_edit1)
        splitter.addWidget(text_edit2)

        splitter.splitterMoved.connect(self.on_splitter_moved)

        self.setCentralWidget(splitter)

    def on_splitter_moved(self, pos, index):
        print(f'Splitter moved to position {pos} at index {index}')

app = QApplication(sys.argv)
window = MainWindow()
window.show()
sys.exit(app.exec_())

결론

QSplitter는 PyQt5에서 자주 사용되는 위젯으로, 복잡한 레이아웃을 구성할 때 매우 유용합니다. 이 포스팅에서는 QSplitter의 기본 사용법과 주요 메서드, 시그널을 소개했습니다. QSplitter를 활용하여 사용자에게 더 나은 인터페이스를 제공할 수 있습니다. QSplitter의 다양한 기능을 활용해보세요!

728x90
반응형