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_())
'파이썬 > PyQt5' 카테고리의 다른 글
파이썬(Python) PyQt5 파일 다이얼로그 QFileDialog 사용하기 (1) | 2021.11.05 |
---|---|
파이썬(Python) PyQt5 QMessageBox 구현하기 (0) | 2021.11.02 |
파이썬(Python) PyQt5 QLineEdit 한 줄 입력 라인에디터 사용법 (0) | 2021.11.02 |
파이썬(Python) PyQt5 QDialog 위젯으로 새창 띄우기 (2) | 2021.11.01 |
파이썬(Python) PyQt5 QStatusBar 구현하기 (0) | 2021.11.01 |