PyQt5 QTableWidget 예제Qt/PyQt5 강좌2024. 5. 23. 21:00
Table of Contents
반응형
PyQt5 QTableWidget 예제입니다.
2024. 5. 23 최초작성
테이블 위젯에서 항목을 선택하면 한줄이 하이라이트되고, 밑에 있는 텍스트 에디트에 테이블 위젯에서 선택된 줄의 내용이 출력됩니다.
import sys from PyQt5.QtWidgets import QApplication, QMainWindow, QTableWidget, QTableWidgetItem, QVBoxLayout, QWidget, QTextEdit from PyQt5.QtCore import Qt class MyWindow(QMainWindow): def __init__(self): super().__init__() self.setWindowTitle("PyQt5 테이블 예제") # 테이블 위젯을 생성 self.table_widget = QTableWidget() # 5줄로 설정 self.table_widget.setRowCount(5) # 컬럼 2개로 설정 self.table_widget.setColumnCount(2) # 컬럼의 이름 설정 self.table_widget.setHorizontalHeaderLabels(["Column 1", "Column 2"]) # 마우스로 선택시 테이블의 한 줄이 한번에 선택 되도록 설정 self.table_widget.setSelectionBehavior(QTableWidget.SelectRows) self.table_widget.setSelectionMode(QTableWidget.SingleSelection) # 수직 스크롤바 제거 self.table_widget.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOff) # 수평 스크롤바 제거 self.table_widget.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff) # 테이블에 아이템 추가 for row in range(5): # 줄 인덱스 for col in range(2): # 열 인덱스 item = QTableWidgetItem(f"Item {row+1},{col+1}") self.table_widget.setItem(row, col, item) # 테이블의 셀의 내용에 맞추어 테이블 크기 조정 self.table_widget.resizeColumnsToContents() self.table_widget.resizeRowsToContents() # 테이블 위젯의 크기를 계산하여 크기를 지정 table_width = self.table_widget.verticalHeader().width() + self.table_widget.horizontalHeader().length() + 2 * self.table_widget.frameWidth() table_height = self.table_widget.horizontalHeader().height() + self.table_widget.verticalHeader().length() + 2 * self.table_widget.frameWidth() self.table_widget.setFixedSize(table_width, table_height) # 셀 클릭시 호출될 슬롯함수 지정 self.table_widget.cellClicked.connect(self.cell_was_clicked) # 선텍된 테이블의 열 내용을 보여줄 텍스트 에디트 위젯 생성 self.text_edit = QTextEdit() self.text_edit.setReadOnly(True) # 읽기 전용 # 위젯을 세로로 배치하는 레이아웃 생성하고 2개의 위젯을 추가 layout = QVBoxLayout() layout.addWidget(self.table_widget, alignment=Qt.AlignCenter) # 위젯을 가운데 정렬 layout.addWidget(self.text_edit) # QWidget을 사용하여 컨테이너를 만들고, 그 컨테이너에 레이아웃을 설정한 다음, 그 컨테이너를 메인 윈도우의 중앙 위젯(=메인 위젯)으로 설정 container = QWidget() container.setLayout(layout) self.setCentralWidget(container) # 셀 클릭시 호출되는 슬롯함수 def cell_was_clicked(self, row, col): # 선택된 열에 해당되는 셀의 내용을 리스트에 저장합니다. row_contents = [] for column in range(self.table_widget.columnCount()): row_contents.append(self.table_widget.item(row, column).text()) # 리스트에 있는 내용을 텍스트 에디트 위젯에 출력합니다. self.text_edit.setPlainText(", ".join(row_contents)) if __name__ == "__main__": # QApplication 객체를 생성합니다. QApplication 클래스는 GUI 애플리케이션을 실행하기 위해 필요한 초기화와 메인 이벤트 루프를 처리합니다. app = QApplication(sys.argv) # QMainWindow를 상속받은 MyWindow 클래스의 인스턴스를 생성합니다. 애플리케이션의 메인 창(main window) 역할을 합니다. window = MyWindow() # MyWindow 인스턴스를 화면에 표시합니다. window.show() # 애플리케이션의 메인 이벤트 루프를 시작하고, 애플리케이션이 종료될 때 종료 코드를 반환합니다. # app.exec_()는 이벤트 루프를 시작합니다. 이 이벤트 루프는 사용자 입력(키보드, 마우스 등)을 처리하고, 타이머 이벤트를 처리하며, GUI 화면을 업데이트합니다. # sys.exit()는 애플리케이션이 종료될 때 Python 인터프리터를 종료합니다. app.exec_()가 반환하는 코드를 sys.exit()에 전달하여 애플리케이션이 정상적으로 종료되었는지 또는 오류가 발생했는지를 나타냅니다. # app.exec_()는 애플리케이션이 종료될 때까지(예: 사용자가 창을 닫을 때까지) 반환하지 않습니다. sys.exit(app.exec_()) |
Ctrl 키를 누른채 마우스로 개별 줄 여러 개를 선택하거나 Shift 키를 누른채 시작 줄과 끝줄을 선택하여 여러줄을 한번에 선택할 수 있습니다.
import sys from PyQt5.QtWidgets import QApplication, QMainWindow, QTableWidget, QTableWidgetItem, QVBoxLayout, QWidget from PyQt5.QtCore import Qt class MyWindow(QMainWindow): def __init__(self): super().__init__() self.setWindowTitle("PyQt5 Multi-Row Selection Example") self.setGeometry(100, 100, 600, 400) # 테이블 위젯 생성 self.table_widget = QTableWidget() self.table_widget.setRowCount(10) self.table_widget.setColumnCount(3) self.table_widget.setHorizontalHeaderLabels(["Column 1", "Column 2", "Column 3"]) # 테이블에 데이터 추가 for row in range(10): for col in range(3): item = QTableWidgetItem(f"Item {row+1},{col+1}") self.table_widget.setItem(row, col, item) # 여러 줄을 선택할 수 있도록 설정 self.table_widget.setSelectionMode(QTableWidget.ExtendedSelection) self.table_widget.setSelectionBehavior(QTableWidget.SelectRows) # 레이아웃 설정 layout = QVBoxLayout() layout.addWidget(self.table_widget) container = QWidget() container.setLayout(layout) self.setCentralWidget(container) if __name__ == "__main__": app = QApplication(sys.argv) window = MyWindow() window.show() sys.exit(app.exec_()) |
반응형
'Qt > PyQt5 강좌' 카테고리의 다른 글
pyQt5 다중 탭에 텍스트 에디터가 포함된 예제 (0) | 2024.08.08 |
---|---|
PyQt5 콤보박스(QComboBox) 예제 (0) | 2024.07.06 |
PyQt5에서 윈도우의 모든 창 버튼(최소화, 최대화, 닫기)을 제거 (0) | 2024.05.21 |
PyQT5 - 랜덤 컬러 그리드 생성하기 (0) | 2024.04.17 |
pyQt5 - process에서 메시지 박스를 보여주는 예제 (0) | 2024.04.14 |
시간날때마다 틈틈이 이것저것 해보며 블로그에 글을 남깁니다.
블로그의 문서는 종종 최신 버전으로 업데이트됩니다.
여유 시간이 날때 진행하는 거라 언제 진행될지는 알 수 없습니다.
영화,책, 생각등을 올리는 블로그도 운영하고 있습니다.
https://freewriting2024.tistory.com
제가 쓴 책도 한번 검토해보세요 ^^
@webnautes :: 멈춤보단 천천히라도
그렇게 천천히 걸으면서도 그렇게 빨리 앞으로 나갈 수 있다는 건.
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!