파이썬(Python) PyQt5 레이아웃 QGridLayout 구현하기
QGridLayout 는 QLayout 의 종류 중 하나입니다. 특징은 화면을 그리드 형태로 나누어서 X, Y 좌표로 컨트롤을 올리는 구조입니다. 위젯을 추가할 때 넘기는 QGridLayout 의 addWidget(컨트롤객체, x, y) 에서 x 값이 열, y 값이 행의 개수를 뜻합니다. 엑셀의 셀 구조와 같습니다.
▼ QMainWindow 화면에 QGridLayout 을 이용해 widget 을 추가하는 과정은 다음과 같습니다. QMainWindow 의 객체를 QWidget 의 생성자 파라미터로 넘기고, QWidget 에는 QGridLayout 을 추가합니다. 마지막으로 QGridLayout 에 올라갈 컨트롤 Widget 을 추가합니다. QGridLayout 의 addWidget() 을 사용합니다. QMainWindow 화면에 QGridLayout과 QPushButton 이 추가된 위젯을 표시하기 위해 setCentralWidget() 함수를 사용합니다. 위젯은 화면 중앙에 표시됩니다.

▼ 위의 그림 1번에서 3번까지 과정에 대한 소스입니다. QWidget 의 생성자에 들어간 self 는 QMainWindow 객체 입니다. 버튼은 2중 for 문을 돌면서 QGridLayout 에 다수의 QPushButton 을 추가했습니다.
widget = QWidget(self)
# QGridLayout 설정
gridlayout = QGridLayout(widget)
for i in range(0, 5):
for j in range(0, 5):
print(i)
gridlayout.addWidget(QPushButton(str(i) + str(j)), i, j)
▼ 마지막 4번에 해당하는 소스는 다음과 같습니다. QMainWindow 에는 QWidget 객체를 추가하는데 setCentralWidget() 을 사용했습니다. 화면 중앙에 위젯을 표현합니다.
self.setCentralWidget(widget)
▼ 각 객체의 포함관계는 다음과 같습니다. QMainWindow 에는 QGridLayout 을 추가하기 위해서는 QWidget 이 필요합니다. 마지막에는 QWidget 을 QMainWidow 에 추가하는 것입니다.

▼ 전체 소스는 다음과 같습니다. QGridLayout 에 QPushButton 버튼 25 개를 for 문으로 추가한 뒤 QMainWindow 에 표시하는 소스입니다.
#!/usr/bin/env python3
import sys
from PyQt5.QtWidgets import QGridLayout, QMainWindow, \
QPushButton, QApplication, QWidget
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
# 윈도우 설정
self.setGeometry(50,50,600,300) # x, y, w, h
self.setWindowTitle('Status Window')
# GridLayout 에 버튼 위치
self.init_gridlayout()
def init_gridlayout(self):
widget = QWidget(self)
# QGridLayout 설정
gridlayout = QGridLayout(widget)
for i in range(0, 5):
for j in range(0, 5):
print(i)
gridlayout.addWidget(QPushButton(str(i) + str(j)), i, j)
self.setCentralWidget(widget)
if __name__ == '__main__':
app = QApplication(sys.argv)
mainWindow = MainWindow()
mainWindow.show()
sys.exit(app.exec_())
