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


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

이전 페이지에서는 PyQt5의 QTableWidget의 기본 사용법에 대해 소개했습니다.

이번에는 QTableWidget의 다양한 메서드와 시그널을 사용하는 방법을 소개합니다.



1) 테이블 전체 초기화하기

import sys
import numpy as np
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)

        self.clearBtn = QPushButton('Clear')
        self.clearBtn.clicked.connect(self.tableWidget.clear)

        rand_items = np.random.randint(1, 100, size=(20, 4))

        for i in range(20):
            for j in range(4):
                self.tableWidget.setItem(i, j, QTableWidgetItem(str(rand_items[i, j])))

        self.tableWidget.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch)

        layout = QVBoxLayout()
        layout.addWidget(self.tableWidget)
        layout.addWidget(self.clearBtn)
        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 클래스의 clear() 메서드는 테이블의 전체 아이템을 삭제합니다.

QPushButton위젯을 사용해서 버튼을 만들고 버튼이 클릭되었을 때 clear() 메서드가 호출되도록 했습니다.

PyQt5 시그널과 슬롯 (Signal&Slot) 페이지를 참고하세요.

결과는 아래와 같습니다.


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




2) 스크롤 버튼 만들기

import sys
import numpy as np
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)

        self.clearBtn = QPushButton('Clear')
        self.clearBtn.clicked.connect(self.tableWidget.clear)

        self.scrollToTop = QPushButton('Scroll to Top')
        self.scrollToTop.clicked.connect(self.tableWidget.scrollToTop)

        self.scrollToBottom = QPushButton('Scroll to Bottom')
        self.scrollToBottom.clicked.connect(self.tableWidget.scrollToBottom)

        rand_items = np.random.randint(1, 100, size=(20, 4))

        for i in range(20):
            for j in range(4):
                self.tableWidget.setItem(i, j, QTableWidgetItem(str(rand_items[i, j])))

        self.tableWidget.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch)

        layout = QVBoxLayout()
        layout.addWidget(self.tableWidget)
        layout.addWidget(self.clearBtn)
        layout.addWidget(self.scrollToTop)
        layout.addWidget(self.scrollToBottom)
        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_())

이번에는 QPushButton을 사용해서 두 개의 버튼을 더 만들었습니다.

이 버튼들을 클릭하면 QTableWidget 클래스의 scrollToTop() 또는 scrollToBottom()가 호출되어서,

테이블의 가장 위 또는 아래로 이동합니다.


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




3) 셀 정보 가져오기

import sys
import numpy as np
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)

        self.label = QLabel('')

        self.scrollToTop = QPushButton('Scroll to Top')
        self.scrollToTop.clicked.connect(self.tableWidget.scrollToTop)

        self.scrollToBottom = QPushButton('Scroll to Bottom')
        self.scrollToBottom.clicked.connect(self.tableWidget.scrollToBottom)

        self.tableWidget.cellClicked.connect(self.set_label)

        rand_items = np.random.randint(1, 100, size=(20, 4))

        for i in range(20):
            for j in range(4):
                self.tableWidget.setItem(i, j, QTableWidgetItem(str(rand_items[i, j])))

        self.tableWidget.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch)

        layout = QVBoxLayout()
        layout.addWidget(self.tableWidget)
        layout.addWidget(self.label)
        layout.addWidget(self.scrollToTop)
        layout.addWidget(self.scrollToBottom)
        self.setLayout(layout)

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

    def set_label(self, row, column):
        item = self.tableWidget.item(row, column)
        value = item.text()
        label_string = 'Row: ' + str(row+1) + ', Column: ' + str(column+1) + ', Value: ' + str(value)
        self.label.setText(label_string)

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

QLabel 위젯을 사용해서 텍스트 라벨을 하나 만들었습니다.

set_label() 함수는 cellClicked 시그널로부터 전달된 row, column 정보를 사용해서 아이템의 텍스트를 얻습니다.

QLabel 위젯의 setText() 메서드를 사용해서 라벨의 텍스트를 설정했습니다.

결과는 아래와 같습니다.


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


이전글/다음글