본문 바로가기

프로그래밍/PyQt5 GUI

23. QSplitter

QSplitter 위젯은 경계를 드래그해서 자식 위젯의 크기를 조절할 수 있도록 합니다.

 

23-1 예제: ex22

import sys
from PyQt5.QtWidgets import (QApplication, QWidget, QHBoxLayout, QFrame, QSplitter)
from PyQt5.QtCore import Qt

class MyApp(QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        hbox = QHBoxLayout()

        top = QFrame()
        top.setFrameShape(QFrame.Box)

        midleft = QFrame()
        midleft.setFrameShape(QFrame.StyledPanel)

        midright = QFrame()
        midright.setFrameShape(QFrame.Panel)

        bottom = QFrame()
        bottom.setFrameShape(QFrame.WinPanel)
        bottom.setFrameShadow(QFrame.Sunken)

        splitter1 = QSplitter(Qt.Horizontal)
        splitter1.addWidget(midleft)
        splitter1.addWidget(midright)

        splitter2 = QSplitter(Qt.Vertical)
        splitter2.addWidget(top)
        splitter2.addWidget(splitter1)
        splitter2.addWidget(bottom)

        hbox.addWidget(splitter2)
        self.setLayout(hbox)

        self.setWindowTitle('QSplitter')
        self.setGeometry(300, 300, 300, 200)
        self.show()

if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = MyApp()
    sys.exit(app.exec_())

23-2 설명

창이 네 개으 작은 영역으로 나누어졌습니다. 각 영역의 프레임의 스타일을 다르게 설정합니다.

top = QFrame()
top.setFrameShape(QFrame.Box)

midleft = QFrame()
midleft.setFrameShape(QFrame.StyledPanel)

midright = QFrame()
midright.setFrameShape(QFrame.Panel)

bottom = QFrame()
bottom.setFrameShape(QFrame.WinPanel)
bottom.setFrameShadow(QFrame.Sunken)

각 영역에 들어갈 프레임을 만들어줍니다. 프레임의 형태와 그림자의 스타일을 setFrameShape과 setFrameShadow를 이용해서 설정할 수 있습니다.

예제에서와 같이 setFrameShape에는 NoFrame/Box/Panel/StyledPanel/HLine/VLine/WinPanel을, setFrameShadow에는 Plain/Raised/Sunken

각 상수의 사용에 대한 설명과 결과는 아래의 이미지를 참고하세요

  • FrameShape(프레임 모양)을 설정하는 상수

  • FrameShadow(프레임 그림자)를 설정하는 상수

  • Frame Shape & Shadow

splitter1 = QSplitter(Qt.Horizontal)
splitter1.addWidget(midleft)
splitter1.addWidget(midright)

splitter2 = QSplitter(Qt.Vertical)
splitter2.addWidget(top)
splitter2.addWidget(splitter1)
splitter2.addWidget(bottom)
  • QSplitter의 첫 번째 객체를 만들어 수평 방향으로 나누어, 왼쪽에는 midleft, 오른쪽에는 midright 프레임 위젯을 넣어줍니다.
  • 두 번째 객체를 만들어 수직 방향으로 나누어, top, splitter1, bottom 3개의 프레임 위젯을 넣어줍니다.
hbox.addWidget(splitter2)
self.setLayout(hbox)

splitter2 위젯을 수평 박스 레이아웃에 넣어주고, 전체의 레이아웃으로 설정합니다.

 

23-3 결과

'프로그래밍 > PyQt5 GUI' 카테고리의 다른 글

25. QTabWidget  (0) 2021.07.26
24. QGroupBox  (0) 2021.07.26
22. QSlider & QDial  (0) 2021.07.26
21. QProgressBar  (0) 2021.07.26
20. QLineEdit  (0) 2021.07.23