pyqt - 레이아웃

BANG·2020년 11월 25일
0

Qt

목록 보기
4/12

박스 레이아웃

  • QHBoxLayout(수평), QVBoxLayout(수직) 생성자는 박스를 하나 만듬
  • 다른 레이아웃 박스를 넣을 수도 있고 위젯을 배치할 수도 있음
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')
        cancelButton = QPushButton('Cancel')
        
        # 두 버튼 양쪽의 공백이 1로 같음
        hbox = QHBoxLayout()
        hbox.addStretch(1)	# 공백을 만들기 위해 사용
        hbox.addWidget(okButton)
        hbox.addWidget(cancelButton)
        hbox.addStretch(1)
        
        # 수평박스(hbox) 위와 아래의 공백은 3: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_())

그리드 레이아웃

  • 위젯의 공간을 행 (row)과 열 (column)로 구분
import sys
from PyQt5.QtWidgets import (QApplication, QWidget, QGridLayout, QLabel, QLineEdit, QTextEdit)


class MyApp(QWidget):

    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        grid = QGridLayout()
        self.setLayout(grid)

        grid.addWidget(QLabel('Title:'), 0, 0)
        grid.addWidget(QLabel('Author:'), 1, 0)
        grid.addWidget(QLabel('Review:'), 2, 0)

        grid.addWidget(QLineEdit(), 0, 1)
        grid.addWidget(QLineEdit(), 1, 1)
        grid.addWidget(QTextEdit(), 2, 1)

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


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

0개의 댓글