[PyQt5] QTableWidget 위젯으로 테이블 사용하기 2¶
이전 페이지에서는 PyQt5의 QTableWidget의 기본 사용법에 대해 소개했습니다.
이번에는 QTableWidget의 다양한 메서드와 시그널을 사용하는 방법을 소개합니다.
■ Table of Contents
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) 페이지를 참고하세요.
결과는 아래와 같습니다.
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()가 호출되어서,
테이블의 가장 위 또는 아래로 이동합니다.
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() 메서드를 사용해서 라벨의 텍스트를 설정했습니다.
결과는 아래와 같습니다.
이전글/다음글
다음글 : 배치와 연결 (3) - 도형 연결하기