본문 바로가기
Python Library/PySide

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

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

레이아웃 (Layouts)

 

창에 둘 이상의 위젯을 추가하고 위젯이 끝나는 위치를 제어하기를 원한다. Qt에서 이것을 하기 위해 우리는 레이아웃 을 사용한다. Qt에는 4가지 기본 레이아웃이 있으며 다음 표에 나열되어 있다.

 

 

 Qt에는 세 가지 위치 레이아웃이 있다. (VBoxLayout, QHBoxLayout 및 QGridLayout). 또한, QStackedLayout는 한 번에 하나의 레이아웃만 표시하면서 동일한 공간 내에서 위젯을 다른 위젯 위에 배치할 수 있는 기능도 있다.

 

시작하기 전에 간단한 애플리케이션 개요가 필요하다. 다음 코드를 파일에 저장한다.

 

import sys
from PySide6.QtWidgets import QApplication, QMainWindow, QWidget
from PySide6.QtGui import QPalette, QColor

class MainWindow(QMainWindow):

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

        self.setWindowTitle("My App")

app = QApplication(sys.argv)

window = MainWindow()
window.show()

app.exec_()

 

레이아웃을 더 쉽게 시각화할 수 있도록 먼저 선택한 단색을 표시하는 간단한 사용자 지정 위젯을 만든다. 이것은 레이아웃에 추가하는 위젯을 구별하는 데 도움이 된다. 파일에 다음 코드를 최상위 수준의 새 클래스로 추가한다.

 

class Color(QWidget):

    def __init__(self, color):
        super(Color, self).__init__()
        self.setAutoFillBackground(True)

        palette = self.palette()
        palette.setColor(QPalette.Window, QColor(color))
        self.setPalette(palette)

 

이 코드에서 자신의 커스텀 위젯을 만들기 위해 서브클래스 QWidget를 만든다. Color. 위젯을 생성할 때 단일 매개변수를 허용한다. 먼저, 창 쿨러로 배경을 자동으로 채우도록 위젯에 지시하도록 설정한다. 다음으로 현재 팔레트 QPalette.Window (기본적으로 글로벌 데스크탑 팔레트)를 얻고 전달한 값에 의해 설명된 새로운 색상 QColor으로 현재 색상을 변경한다. 마지막으로 이 팔레트를 위젯에 다시 적용한다. 최종 결과는 위젯을 만들 때 지정한 단색으로 채워진 위젯이다.

 

Color('red')

 

먼저 전체 창을 단일 색상으로 채우는 데 사용하여 새 위젯을 테스트한다. 완료되면 setCentralWidget를 사용하는 QMainWindow에 추가할 수 있으며 단색 빨간색 창이 나타난다.

 

class MainWindow(QMainWindow):

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

        self.setWindowTitle("My App")

        widget = Color('red')
        self.setCentralWidget(widget)

 

다음으로 QWidget창에 레이아웃을 추가 하려면 레이아웃을 보유할 더미가 필요하다.

 

QVBoxLayout : 세로로 배열된 위젯

 

QVBoxLayout위젯을 다른 위젯 위에 선형으로 배열한다. 위젯을 추가하면 열 맨 아래에 위젯이 추가된다.

 

 

레이아웃에 위젯을 추가한다. QMainWindow에 레이아웃을 추가하려면 더미 QWidget에 적용해야 한다. 이렇게 하면 .setCentralWidget은 위젯 (및 레이아웃)을 창에 적용하는 데 사용할 수 있다. 색상이 지정된 위젯 QWidget은 창에 포함된 레이아웃에 정렬된다. 먼저, 이전과 같이 빨간색 위젯을 추가한다.

 

class MainWindow(QMainWindow):

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

        self.setWindowTitle("My App")

        layout = QVBoxLayout()

        layout.addWidget(Color('red'))

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

 

레이아웃에 색상이 지정된 위젯을 몇 개 더 추가하면 추가된 순서대로 수직으로 정렬되는 것을 알 수 있다.

 

class MainWindow(QMainWindow):

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

        self.setWindowTitle("My App")

        layout = QVBoxLayout()

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

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