레이아웃 (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)
'Python Library > PySide' 카테고리의 다른 글
[PySide] 레이아웃 (Layouts) (3) (0) | 2022.06.23 |
---|---|
[PySide] 레이아웃 (Layouts) (2) (0) | 2022.06.23 |
[PySide] 위젯 (QSlider, QDial) (5) (0) | 2022.06.13 |
[PySide] 위젯 (QLineEdit, QSpinBox, QDoubleSpinBox) (4) (0) | 2022.06.13 |
[PySide] 위젯 (QComboBox, QListWidget) (3) (0) | 2022.06.13 |