박스 레이아웃 클래스를 이용하면 여러 위젯을 수평과 수직으로 정렬하여 배치할 수 있습니다. (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 |