QGridLayout 은 그리드 레이아웃입니다.
그리드는 배열처럼 생겼습니다.
바둑판을 떠올리면 느낌이 옵니다.
우선 레이아웃을 붙여보겠습니다.
레이아웃 구현하는 것은 어렵지 않죠?
객체지향 프로그래밍의 개념을
잘 모른다면 좀 이해가 어려울 수 있습니다.
self 는 QWidget을 상속받은 MyApp 을 말합니다.
즉 QWidget - 현재 최상위 윈도우에
그리드 레이아웃을 설정합니다.
from PyQt5.QtWidgets import *
import sys
class MyApp(QWidget):
def __init__(self):
QWidget.__init__(self)
# grid layout
layout = QGridLayout()
self.setLayout(layout)
label = QLabel("L 0,0")
layout.addWidget(label, 0, 0)
label = QLabel("L 0,1")
layout.addWidget(label, 0, 1)
label = QLabel("L 1,0")
layout.addWidget(label, 1, 0)
label = QLabel("L 1,1")
layout.addWidget(label, 1, 1)
if __name__ == "__main__":
app = QApplication(sys.argv)
screen = MyApp()
screen.resize(320, 240)
screen.show()
sys.exit(app.exec_())
addWidget 할 때 좌표를 설정합니다.
좌표계가 좌측 상단에서
우측하단으로 0,0 0,1 1,0 1,1
과 같이 내려오는데요.
대부분 프로그래밍 언어에서
우하향하는 좌표계를 사용합니다.
수학에서 사용하는 좌표와는
차이가 있습니다.
다음은 그리드 레이아웃으로
버튼을 배열해보겠습니다.
이번에는 for문을 중첩시켜서
버튼을 배치해보겠습니다.
그리드 레이아웃의 장점은
순서대로 집어넣기에 좋습니다.
중첩 for 문을 사용하면
2차원 배열이기도 하고
2차원 좌표가 되기도 합니다.
레이아웃도 0,0 좌상단에서
4,4 우하향으로 내려가는 것을
볼 수 있습니다.
그리드 레이아웃은 쓸모가 있어 보이죠?
또 저래뵈도 반응형(Dynamic) 이라
버튼의 숫자에 따라 윈도우 창이
자동으로 늘어나고 줄어드는 것을 볼 수 있습니다.
요정도만 파악하고 넘어 가겠습니다.
from PyQt5.QtWidgets import *
import sys
class MyApp(QWidget):
def __init__(self):
QWidget.__init__(self)
# grid layout
layout = QGridLayout()
self.setLayout(layout)
SIZE = 5
for i in range(SIZE):
for j in range(SIZE):
temp = "(" + str(i) + "," + str(j) + ")"
layout.addWidget(QPushButton(temp), i, j)
if __name__ == "__main__":
app = QApplication(sys.argv)
screen = MyApp()
screen.resize(480, 320)
screen.show()
sys.exit(app.exec_())