본문 바로가기

프로그래밍/PyQt5 GUI

13. 박스 레이아웃

박스 레이아웃 클래스를 이용하면 여러 위젯을 수평과 수직으로 정렬하여 배치할 수 있습니다. (QBoxLayout 공식 문서) 참고

QHBoxLayout, QVBoxLayout 생성자는 여러 위젯을 수평과 수직으로 박스를 만들어 배치할 수 있으며 다른 레이아웃도 배치할 수 있습니다.

필요한 공간을 만들기 위해 addStretch() 메서드를 사용하여 빈 공간을 조절할 수 있습니다.

13-1 예제: ex12

import sys
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QHBoxLayout, QVBoxLayout

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

    def initUI(self):
        okButton = QPushButton('OK')
        cencelButton = QPushButton('Cancel')

        hbox = QHBoxLayout()
        hbox.addStretch(1)
        hbox.addWidget(okButton)
        hbox.addWidget(cencelButton)
        hbox.addStretch(1)

        vbox = QVBoxLayout()
        vbox.addStretch(3)
        vbox.addLayout(hbox)
        vbox.addStretch(1)

        self.setLayout(vbox)

        self.setWindowTitle('Box Layout')
        self.setGeometry(300, 300, 300, 200)
        self.show()

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

13-2 설명

hbox = QHBoxLayout()
hbox.addStretch(1)
hbox.addWidget(okButton)
hbox.addWidget(cencelButton)
hbox.addStretch(1)
  • 수평 박스를 하나 만들고, 두 개의 버튼과 양쪽 빈 공간을 하나씩 추가합니다.
vbox = QVBoxLayout()
vbox.addStretch(3)
vbox.addLayout(hbox)
vbox.addStretch(1)
  • 수직 박스를 하나 만들고, 위쪽에 addStretch() 메서드를 사용하여 빈 공간을 세개 추가합니다.
  • 수평 박스를 수직 박스에 넣어 주고, 아래에 빈 공간을 한개 추가합니다.
  • 위와 아래의 빈 공간의 크기는 항상 3:1을 유지합니다.
self.setLayout(vbox)
  • 최종적으로 수직 박스를 창의 매인 레이아웃으로 설정합니다.

13-3 결과

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

15. QPushButton  (0) 2021.07.23
14. 그리드 레이아웃  (0) 2021.07.23
12. 절대적 배치  (0) 2021.07.22
11. StyleSheet (스타일 꾸미기)  (0) 2021.07.22
10. 날짜와 시간 표시하기  (0) 2021.07.22