☘️

010 QSplitter (구역 나누기 위젯)

1. 코드

import sys from PyQt5.QtCore import Qt from PyQt5.QtWidgets import QWidget, QApplication, QSplitter, QHBoxLayout class 구역나누기위젯(QWidget): def __init__(self): super().__init__() self.UI초기화() def UI초기화(self): hbox = QHBoxLayout(self) top = QWidget(self) top.setStyleSheet('background-color : red;') middle = QWidget(self) middle.setStyleSheet('background-color : green;' 'border-radius : 10px;') bottom_left = QWidget(self) bottom_left.setStyleSheet('background-color : blue;' 'border-style : solid;' 'border-width : 3px;' 'border-color : black;') bottom_right = QWidget(self) bottom_right.setStyleSheet('background-color : gray;' 'border-style : outset;' 'border-width : 4px;' 'border-color : red;') split1 = QSplitter(Qt.Horizontal) split1.addWidget(bottom_left) split1.addWidget(bottom_right) split2 = QSplitter(Qt.Vertical) split2.addWidget(top) split2.addWidget(middle) split2.addWidget(split1) hbox.addWidget(split2) self.setLayout(hbox) self.setGeometry(300, 300, 400, 300) self.setWindowTitle('QLineEdit') self.show() 프로그램무한반복 = QApplication(sys.argv) 실행인스턴스 = 구역나누기위젯() 프로그램무한반복.exec_()

2. 상세 설명

QSplitter를 사용하면 가장 좋은 점은 Split Handle을 사용할 수 있다는 것입니다. 예를 들어 아래와 같은 구성이라면 Handler를 마우스로 클릭하여 상하 좌우로 움직일 수 있죠.
notion imagenotion image
 
우선 위젯을 만들어 각각 위젯에 스타일을 입혀보도록 하겠습니다. 아무 기능이 없는 QWidget입니다. 버튼을 만드셔도 좋고, 라벨을 만드셔서 테스트하셔도 좋습니다.
 
top = QWidget(self) top.setStyleSheet('background-color : red;') middle = QWidget(self) middle.setStyleSheet('background-color: green;' 'border-radius : 10px;') bottom_left = QWidget(self) bottom_left.setStyleSheet('background-color : blue;' 'border-style: solid;' 'border-width : 3px;' 'border-color : black;') bottom_right = QWidget(self) bottom_right.setStyleSheet('background-color : gray ;' 'border-style: outset;' 'border-width : 4px;' 'border-color : red;')
  • 각 위젯의 경계선을 선택해 위젯의 크기를 줄이거나 늘릴 수 있음
  • 각 위젯마다 setStyleSheet로 옵션을 주어 다르게 표시
 
split1 = QSplitter(Qt.Horizontal) split1.addWidget(bottom_left) split1.addWidget(bottom_right) split2 = QSplitter(Qt.Vertical) split2.addWidget(top) split2.addWidget(middle) split2.addWidget(split1) hbox.addWidget(split2) self.setLayout(hbox)
  • QWidget, QSplitter, QHBoxLayout 이용해 레이아웃 설정
  • 즉, 최하단 위젯에서 최상위 레이아웃으로 가는것을 표시한다면
  • split1(bottom_left, bottom_right) → split2 (top, middle,split1) → hbox → 화면 구성으로 되어있음

3. 실행 화면

경계선을 드래그하여 만든 크기들이 변형된 위젯들경계선을 드래그하여 만든 크기들이 변형된 위젯들
경계선을 드래그하여 만든 크기들이 변형된 위젯들