[PyQt5] QTableWidget 위젯으로 테이블 사용하기


[PyQt5] QTableWidget 위젯으로 테이블 사용하기

이 페이지에서는 PyQt5의 QTableWidget을 사용해서 데이터를 테이블 형태로 표현하는 방법에 대해 소개합니다.

for 문을 사용해서 많은 양의 데이터를 테이블에 표현하고, 테이블의 폭을 조절하는 방법에 대해서도 설명합니다.



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 객체로 주어집니다.

결과는 아래와 같습니다.


[PyQt5] QTableWidget 위젯으로 테이블 사용하기




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 문을 사용해서 많은 양의 데이터를 테이블로 표현했습니다.

테이블의 크기가 커서 위젯에 표현되지 않을 경우 자동으로 스크롤바가 표시됩니다.


[PyQt5] QTableWidget 위젯으로 테이블 사용하기




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를 입력하는 경우 아래 그림과 같이 폭이 위젯에 맞게 조절됩니다.


[PyQt5] QTableWidget 위젯으로 테이블 사용하기



QHeaderView.ResizeToContents를 입력하는 경우 아래 그림과 같이 폭이 항목에 맞게 조절됩니다.


[PyQt5] QTableWidget 위젯으로 테이블 사용하기


이전글/다음글