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를 마우스로 클릭하여 상하 좌우로 움직일 수 있죠.

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/56a20836-5213-4e1e-bc53-6d44cc08bc68/Untitled.png

QSplitter - Qt for Python

우선 위젯을 만들어 각각 위젯에 스타일을 입혀보도록 하겠습니다. 아무 기능이 없는 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;')
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)

3. 실행 화면