본문 바로가기

프로그래밍/PyQt5 GUI

36. QTableWidget

QTableWidget Class는 테이블 형태로 항목을 배치하고 다루도록 합니다. (QTableWidget 공식 문서) 참고

 

36-1 예제: ex35

import sys
from PyQt5.QtWidgets import (QApplication, QWidget, QTableWidget, QAbstractItemView, QHeaderView, QVBoxLayout,
                             QTableWidgetItem)

class MyApp(QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        self.tableWidget = QTableWidget()
        self.tableWidget.setRowCount(10)
        self.tableWidget.setColumnCount(4)
        self.tableWidget.setEditTriggers(QAbstractItemView.NoEditTriggers)
        # self.tableWidget.setEditTriggers(QAbstractItemView.DoubleClicked)
        # self.tableWidget.setEditTriggers(QAbstractItemView.AllEditTriggers)
        self.tableWidget.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch)
        self.tableWidget.horizontalHeader().setSelectionMode(QAbstractItemView.MultiSelection)
        # self.tableWidget.horizontalHeader().setSelectionResizeMode(QHeaderView.ResizeToContents)

        for i in range(10):
            for j in range(4):
                self.tableWidget.setItem(i, j, QTableWidgetItem(str(i+j)))

        self.siseTable = QTableWidget()
        self.siseTable.setColumnCount(2)
        self.siseTable.setRowCount(3)

        colLabels = ["종목명", "종목코드"]
        self.siseTable.setHorizontalHeaderLabels(colLabels)

        self.siseTable.setItem(0, 0, QTableWidgetItem("삼성전자"))
        self.siseTable.setItem(0, 1, QTableWidgetItem("005930"))
        self.siseTable.setItem(1, 0, QTableWidgetItem("SK하이닉스"))
        self.siseTable.setItem(1, 1, QTableWidgetItem("000660"))
        self.siseTable.setItem(2, 0, QTableWidgetItem("NAVER"))
        self.siseTable.setItem(2, 1, QTableWidgetItem("035420"))

        vbox = QVBoxLayout()
        vbox.addWidget(self.tableWidget)
        vbox.addWidget(self.siseTable)
        self.setLayout(vbox)

        self.setWindowTitle('QTableWidget')
        self.setGeometry(300, 100, 600, 400)
        self.show()

if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = MyApp()
    sys.exit(app.exec_())

36-2 설명

self.tableWidget = QTableWidget()
self.tableWidget.setRowCount(20)
self.tableWidget.setColumnCount(4)
  • QTableWidget 클래스를 사용해서 테이블 위젯을 하나 만듭니다.
  • setRowCount() 메서드를 이용하여 행(Row) 개수를 지정하고, setColumnCount() 메서드를 이용하여 열(Column) 개수를 지정합니다.
self.tableWidget.setEditTriggers(QAbstractItemView.NoEditTriggers)
# self.tableWidget.setEditTriggers(QAbstractItemView.DoubleClicked)
# self.tableWidget.setEditTriggers(QAbstractItemView.AllEditTriggers)
  • setEditTriggers() 메서드는 테이블의 항목을 편집 가능하도록 하는 Action을 지정합니다.
  • QAbstractItemView.NoEditTriggers으로 지정하면 편집을 할 수 없습니다.
  • QAbstractItemView.DoubleClicked으로 지정하면 칸을 더블클릭했을 때 편집이 가능합니다.
  • QAbstractItemView.AllEditTriggers으로 지정하면 클릭, 더블클릭 등 모든 엑션에 대해 편집이 가능하도록 합니다.
self.tableWidget.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch)
self.tableWidget.horizontalHeader().setSelectionMode(QAbstractItemView.MultiSelection)
# self.tableWidget.horizontalHeader().setSelectionResizeMode(QHeaderView.ResizeToContents)
  • horizontalHeader()는 수평 헤더를 반환합니다.
  • setSelectionResizeMode() 메서드는 헤더의 크기를 조절하는 방식으로 QHeaderView.Strech로 설정하면 헤더의 폭이 위젯의 폭에 맞춰지도록 합니다.
  • setSelectionMode() 메서드는 헤더를 선택하는 방식으로 QAbstractItemView.MultiSelection로 설정하면 다중 선택이 가능하도록 설정합니다.
  • QHeaderView.ResizeToContents는 헤더의 폭이 항목 값의 폭에 맞춰지도록 합니다.
for i in range(10):
    for j in range(4):
    self.tableWidget.setItem(i, j, QTableWidgetItem(str(i+j)))
  • setItem(row, column, value) 메서드는 테이블 항목을 지정합니다.
  • 순서대로 행과 열의 번호, 그리고 값을 입력합니다.

36-3 결과

'프로그래밍 > PyQt5 GUI' 카테고리의 다른 글

38. QColorDialog  (0) 2021.07.27
37. QInputDialog  (0) 2021.07.27
34. QTextEdit  (0) 2021.07.27
33. QTextBrowser  (0) 2021.07.27
32.QDateTimeEdit  (0) 2021.07.27