본문 바로가기
Python Library/PySide

[PySide] 레이아웃 (Layouts) (2)

by goatlab 2022. 6. 23.
728x90
반응형
SMALL

QHBoxLayout : 가로로 배열된 위젯

 

QHBoxLayout은 수평으로 움직이는 것을 제외하고는 동일하다. 위젯을 추가하면 오른쪽에 추가된다.

 

 

그것을 사용하기 위해 QVBoxLayout를 QHBoxLayout로 변경할 수 있다. 이제 상자가 왼쪽에서 오른쪽으로 흐른다.

 

class MainWindow(QMainWindow):

    def __init__(self):
        super(MainWindow, self).__init__()

        self.setWindowTitle("My App")

        layout = QHBoxLayout()

        layout.addWidget(Color('red'))
        layout.addWidget(Color('green'))
        layout.addWidget(Color('blue'))

        widget = QWidget()
        widget.setLayout(layout)
        self.setCentralWidget(widget)

 

중첩 레이아웃 (Nesting layouts)

 

보다 복잡한 레이아웃의 경우 on 레이아웃 addLayout을 사용하여 레이아웃을 서로 중첩할 수 있다. 아래 QVBoxLayout에서 main QHBoxLayout에 추가한다. 일부 위젯을 QVBoxLayout에 추가하면 상위 레이아웃의 첫 번째 슬롯에 세로로 정렬된다.

 

class MainWindow(QMainWindow):

    def __init__(self):
        super(MainWindow, self).__init__()

        self.setWindowTitle("My App")

        layout1 = QHBoxLayout()
        layout2 = QVBoxLayout()
        layout3 = QVBoxLayout()

        layout2.addWidget(Color('red'))
        layout2.addWidget(Color('yellow'))
        layout2.addWidget(Color('purple'))

        layout1.addLayout( layout2 )

        layout1.addWidget(Color('green'))

        layout3.addWidget(Color('red'))
        layout3.addWidget(Color('purple'))

        layout1.addLayout( layout3 )

        widget = QWidget()
        widget.setLayout(layout1)
        self.setCentralWidget(widget)

 

setContentMargins를 사용하여 레이아웃 주변의 간격을 설정하거나 setSpacing를 사용하여 요소 사이의 간격을 설정할 수 있다.

 

layout1.setContentsMargins(0,0,0,0)
layout1.setSpacing(20)

 

다음 코드는 중첩된 위젯과 레이아웃 여백 및 간격의 조합을 보여준다. 

 

class MainWindow(QMainWindow):

    def __init__(self):
        super(MainWindow, self).__init__()

        self.setWindowTitle("My App")

        layout1 = QHBoxLayout()
        layout2 = QVBoxLayout()
        layout3 = QVBoxLayout()

        layout1.setContentsMargins(0,0,0,0)
        layout1.setSpacing(20)

        layout2.addWidget(Color('red'))
        layout2.addWidget(Color('yellow'))
        layout2.addWidget(Color('purple'))

        layout1.addLayout( layout2 )

        layout1.addWidget(Color('green'))

        layout3.addWidget(Color('red'))
        layout3.addWidget(Color('purple'))

        layout1.addLayout( layout3 )

        widget = QWidget()
        widget.setLayout(layout1)
        self.setCentralWidget(widget)

 

QGridLayout : 그리드에 배열된 위젯

 

여러 요소를 배치하고 사용하려고 시도하고 사용하는 경우, 다른 크기의 위젯이 정렬되도록 하는 것이 매우 어렵다는 것을 알게 될 것이다. 이에 대한 해결책은 QGridLayout이다.

 

 

QGridLayout 그리드에서 항목을 구체적으로 배치할 수 있다. 각 위젯의 행 및 열 위치를 지정합니다. 요소를 건너뛸 수 있으며 요소는 비어 있다.

 

유용하게도 QGridLayout 그리드의 모든 위치를 채울 필요는 없다.

 

class MainWindow(QMainWindow):

    def __init__(self):
        super(MainWindow, self).__init__()

        self.setWindowTitle("My App")

        layout = QGridLayout()

        layout.addWidget(Color('red'), 0, 0)
        layout.addWidget(Color('green'), 1, 0)
        layout.addWidget(Color('blue'), 1, 1)
        layout.addWidget(Color('purple'), 2, 1)

        widget = QWidget()
        widget.setLayout(layout)
        self.setCentralWidget(widget)
728x90
반응형
LIST