[PyQt5] QTableWidget 위젯으로 테이블 사용하기¶
이 페이지에서는 PyQt5의 QTableWidget을 사용해서 데이터를 테이블 형태로 표현하는 방법에 대해 소개합니다.
for 문을 사용해서 많은 양의 데이터를 테이블에 표현하고, 테이블의 폭을 조절하는 방법에 대해서도 설명합니다.
■ Table of Contents
1) 기본 사용¶
import sys
from PyQt5.QtWidgets import *
class MyApp(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.tableWidget = QTableWidget()
self.tableWidget.setRowCount(2)
self.tableWidget.setColumnCount(2)
self.tableWidget.setItem(0, 0, QTableWidgetItem('Apple'))
self.tableWidget.setItem(0, 1, QTableWidgetItem('Banana'))
self.tableWidget.setItem(1, 0, QTableWidgetItem('Orange'))
self.tableWidget.setItem(1, 1, QTableWidgetItem('Grape'))
layout = QVBoxLayout()
layout.addWidget(self.tableWidget)
self.setLayout(layout)
self.setWindowTitle('PyQt5 - QTableWidget')
self.setGeometry(300, 100, 600, 400)
self.show()
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = MyApp()
sys.exit(app.exec_())
QTableWidget() 클래스는 데이터를 테이블의 형태로 표현할 수 있도록 합니다.
setRowCount(), setColumnCount() 메서드는 테이블의 행과 열의 개수를 지정합니다.
테이블의 셀에 데이터를 나타내기 위해서 setItem()을 사용하는데, 행과 열의 인덱스와 함께 항목 (Item)을 입력합니다.
각 항목 (Item)은 QTableWidgetItem 객체로 주어집니다.
결과는 아래와 같습니다.
2) for 문 사용하기¶
import sys
from PyQt5.QtWidgets import *
class MyApp(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.tableWidget = QTableWidget()
self.tableWidget.setRowCount(20)
self.tableWidget.setColumnCount(4)
for i in range(20):
for j in range(4):
self.tableWidget.setItem(i, j, QTableWidgetItem(str(i+j)))
layout = QVBoxLayout()
layout.addWidget(self.tableWidget)
self.setLayout(layout)
self.setWindowTitle('PyQt5 - QTableWidget')
self.setGeometry(300, 100, 600, 400)
self.show()
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = MyApp()
sys.exit(app.exec_())
이번에는 for 문을 사용해서 많은 양의 데이터를 테이블로 표현했습니다.
테이블의 크기가 커서 위젯에 표현되지 않을 경우 자동으로 스크롤바가 표시됩니다.
3) 열 너비 조절하기¶
import sys
from PyQt5.QtWidgets import *
class MyApp(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.tableWidget = QTableWidget()
self.tableWidget.setRowCount(20)
self.tableWidget.setColumnCount(4)
for i in range(20):
for j in range(4):
self.tableWidget.setItem(i, j, QTableWidgetItem(str(i+j)))
self.tableWidget.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch)
# self.tableWidget.horizontalHeader().setSectionResizeMode(QHeaderView.ResizeToContents)
layout = QVBoxLayout()
layout.addWidget(self.tableWidget)
self.setLayout(layout)
self.setWindowTitle('PyQt5 - QTableWidget')
self.setGeometry(300, 100, 600, 400)
self.show()
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = MyApp()
sys.exit(app.exec_())
horizontalHeader() 메서드는 수평 헤더를 반환하는데 setSectionResizeMode()를 사용해서 너비를 지정할 수 있습니다.
QHeaderView.Stretch를 입력하는 경우 아래 그림과 같이 폭이 위젯에 맞게 조절됩니다.
QHeaderView.ResizeToContents를 입력하는 경우 아래 그림과 같이 폭이 항목에 맞게 조절됩니다.