프로그래밍/파이썬

파이썬 Python QT PyQt QGridLayout

에이티에스 2023. 6. 22. 09:03
728x90

PyQt QGridLayout 소개

QGridLayout를 사용하면 그리드의 균일한 행과 열에 위젯을 배치할 수 있습니다. 예를 들어 다음 그림에서는 4개의 열과 3개의 행으로 구성된 표를 보여 줍니다.

행과 열은 0부터 시작하는 인덱싱입니다. 즉, 첫 번째 행의 인덱스는 0이고 두 번째 행의 인덱스는 1입니다. 마찬가지로 첫 번째 열의 인덱스는 0이고 두 번째 열의 인덱스는 1입니다.

 

행과 열 사이의 교집합을 셀이라고 합니다. 셀은 위젯을 배치할 수 있는 공간입니다.

행과 열은 확장될 수 있습니다. 예를 들어 다음 그림에서는 첫 번째 행의 두 번째 열이 두 개의 열에 걸쳐 있고 두 번째 열의 두 번째 행이 두 개의 행에 걸쳐 있음을 보여 줍니다.

위젯이 포함된 셀보다 공간을 덜 차지하는 경우 다음 정렬 옵션 중 하나를 사용하여 셀 내에서 위젯을 정렬할 수 있습니다.

 

정렬 플래그의미

AlignAbsolute 방향이 왼쪽에서 오른쪽으로 이동하면 Align Left(왼쪽 정렬)는 오른쪽 가장자리와 정렬을 의미합니다. 그러나 Align Left를 항상 왼쪽 가장자리와 정렬하려면 Align Left를 Align Absolute 옵션과 결합할 수 있습니다.
AlignBaseline 위젯을 기준선에 맞춥니다.
AlignBottom 위젯을 아래쪽 가장자리에 맞춥니다.
AlignCenter 위젯을 두 차원의 가운데에 맞춥니다.
AlignHCenter 위젯을 사용 가능한 공간에서 수평으로 가운데에 맞춥니다.
AlignHorizontal_Mask AlignLeft | AlignRight | AlignHCenter | AlignJustify | AlignAbsolute
AlignJustify 사용 가능한 공간의 텍스트를 정렬합니다.
AlignLeft 위젯을 왼쪽 가장자리에 맞춥니다.
AlignRight 위젯을 오른쪽 가장자리에 맞춥니다.
AlignTop 위젯을 위쪽 가장자리에 맞춥니다.
AlignVCenter 위젯을 사용 가능한 공간의 세로 가운데에 맞춥니다.
AlignVertical_Mask AlignTop | AlignBottom | AlignVCenter | AlignBaseline

 

QGridLayout 사용

QGridLayout을 사용하려면 다음 단계를 수행합니다:

 

먼저 QGridLayout개체를 만듭니다.

layout = QGridLayout()Code language: Python (python)

둘째, 부모 위젯 레이아웃을 설정합니다.

parent.setLayout(layout)Code language: Python (python)

셋째, 자식 위젯을 그리드 레이아웃에 배치합니다.

layout.addWidget(widget, row, column, rowSpan, columnSpan, alignment)Code language: Python (python)

 

이 구문에서는 다음과 같습니다.

  • widget 는 그리드에 배치하려는 자식 위젯입니다.
  • row 는 0부터 시작하는 행 인덱스입니다.
  • column 는 0부터 시작하는 열 인덱스입니다.
  • rowSpan 은 확장할 행의 수입니다.
  • columnSpan 은 확장하려는 열의 수입니다.
  • alignment 셀 내에서 위젯의 맞춤을 지정합니다.

 

정렬 값을 가져오려면 PyQt6.QtCore로 부터 Qt로부터  가져옵니다.

from PyQt6.QtCore import QtCode language: Python (python)

예를 들어 Qt.AlignmentFlag enum의 값 중 하나를 사용합니다.

Qt.AlignmentFlag.AlignRightCode language: Python (python)

 

PyQt QGridLayout 예제

다음 예제에서는 QGridLayout를 사용하여 로그인 양식을 만드는 방법을 보여 줍니다.

import sys
from PyQt6.QtWidgets import QApplication, QWidget, QPushButton, QLineEdit, QLabel, QGridLayout
from PyQt6.QtCore import Qt


class MainWindow(QWidget):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)

        self.setWindowTitle('Login Form')

        # set the grid layout
        layout = QGridLayout()
        self.setLayout(layout)

        # username
        layout.addWidget(QLabel('Username:'), 0, 0)
        layout.addWidget(QLineEdit(), 0, 1)

        # password
        layout.addWidget(QLabel('Password:'), 1, 0)
        layout.addWidget(QLineEdit(echoMode=QLineEdit.EchoMode.Password), 1, 1)

        # buttons
        layout.addWidget(QPushButton('Log in'), 2, 0,
                         alignment=Qt.AlignmentFlag.AlignRight)
        layout.addWidget(QPushButton('Close'), 2, 1,
                         alignment=Qt.AlignmentFlag.AlignRight)

        # show the window
        self.show()


if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = MainWindow()
    sys.exit(app.exec())
Code language: Python (python)

출력:

 

먼저 QGridLayout개체를 만듭니다.

layout = QGridLayout()
self.setLayout(layout)Code language: Python (python)

 

둘째, username필드를 만들기 위해 셀(0,0)에 QLabel, 셀(0,1)에 QLineEdit를 배치합니다.

layout.addWidget(QLabel('Username:'), 0, 0)
layout.addWidget(QLineEdit(), 0, 1)Code language: Python (python)

 

셋째, password필드를 만들기 위해 셀(1,0)에 QLabel,  셀(1,1)에 QLineEdit를 배치합니다.

layout.addWidget(QLabel('Password:'), 1, 0)
layout.addWidget(QLineEdit(echoMode=QLineEdit.EchoMode.Password), 1, 1)Code language: Python (python)

 

마지막으로 셀(2,0)에 로그인 단추를 놓고 왼쪽 가장자리에 맞춥니다. 또한 닫기 단추를 셀(2,1)에 놓고 오른쪽 가장자리에 맞춥니다.

# buttons
layout.addWidget(QPushButton('Log in'), 2, 0,
                 alignment=Qt.AlignmentFlag.AlignRight)
layout.addWidget(QPushButton('Close'), 2, 1,
                 alignment=Qt.AlignmentFlag.AlignRight)Code language: Python (python)

 

728x90
반응형
그리드형