반응형
PySide6으로 QTableWidget 다중 헤더 설정하는 방법
PySide6를 사용하여 GUI 애플리케이션을 개발할 때, QTableWidget을 활용하면 데이터를 쉽게 표 형식으로 정리할 수 있습니다. 특히, 다중 헤더를 설정하면 데이터 구조를 더욱 직관적으로 정리할 수 있습니다. 이 글에서는 QTableWidget의 다중 헤더를 설정하는 다양한 방법과 관련 기능들을 설명하고, 예제 코드를 제공하겠습니다.
1. QTableWidget 기본 설정
QTableWidget을 사용하기 위해 기본적인 설정부터 시작합니다.
예제 코드: 기본 테이블 생성
from PySide6.QtWidgets import QApplication, QTableWidget, QTableWidgetItem, QVBoxLayout, QWidget
from PySide6.QtGui import QColor
import sys
class TableWidgetExample(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
layout = QVBoxLayout()
self.table = QTableWidget(3, 3) # 3행 3열 테이블 생성
self.table.setHorizontalHeaderLabels(["이름", "나이", "직업"])
data = [["홍길동", "25", "개발자"],
["김철수", "30", "디자이너"],
["이영희", "28", "마케터"]]
for row, rowData in enumerate(data):
for col, value in enumerate(rowData):
item = QTableWidgetItem(value)
if row % 2 == 0:
item.setBackground(QColor(240, 240, 240)) # 회색 배경 적용
self.table.setItem(row, col, item)
self.table.resizeColumnsToContents()
self.table.resizeRowsToContents()
layout.addWidget(self.table)
self.setLayout(layout)
if __name__ == "__main__":
app = QApplication(sys.argv)
window = TableWidgetExample()
window.show()
sys.exit(app.exec())
반응형
2. 다중 헤더 설정 방법
PySide6의 QTableWidget 자체적으로 다중 헤더를 지원하지 않기 때문에, QHeaderView를 활용하여 머리글을 병합하거나 QTreeWidget을 사용하여 계층적 구조를 만들 수 있습니다.
(1) QTableWidget에서 다중 헤더 시뮬레이션하기
기본적인 QTableWidget에서 다중 헤더를 표현하는 방법은 첫 번째 행을 머리글처럼 사용하는 것입니다.
from PySide6.QtWidgets import QApplication, QTableWidget, QTableWidgetItem, QVBoxLayout, QWidget
from PySide6.QtGui import QColor
import sys
class MultiHeaderTable(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
layout = QVBoxLayout()
self.table = QTableWidget(4, 3) # 4행 3열 테이블 생성
# 다중 헤더 구현
self.table.setSpan(0, 0, 1, 2) # 첫 번째 행의 0~1열 병합
self.table.setItem(0, 0, QTableWidgetItem("기본 정보"))
self.table.setItem(0, 2, QTableWidgetItem("직업 정보"))
self.table.setHorizontalHeaderLabels(["", "", ""])
data = [["이름", "나이", "직업"],
["홍길동", "25", "개발자"],
["김철수", "30", "디자이너"],
["이영희", "28", "마케터"]]
for row, rowData in enumerate(data):
for col, value in enumerate(rowData):
item = QTableWidgetItem(value)
if row % 2 == 1:
item.setBackground(QColor(240, 240, 240)) # 회색 배경 적용
self.table.setItem(row + 1, col, item)
self.table.resizeColumnsToContents()
self.table.resizeRowsToContents()
layout.addWidget(self.table)
self.setLayout(layout)
if __name__ == "__main__":
app = QApplication(sys.argv)
window = MultiHeaderTable()
window.show()
sys.exit(app.exec())
이제 테이블의 배경색을 행마다 다르게 적용하여 가독성을 높였습니다.
3. 표를 추가할 수 있는 기능 목록
기능 | 설명 |
행 추가 | 사용자가 행을 추가할 수 있도록 구현 |
열 추가 | 열을 동적으로 추가하는 기능 |
데이터 수정 | 셀 데이터를 수정 가능하도록 설정 |
셀 병합 | 특정 셀을 병합하여 다중 헤더 표현 |
CSV 저장 | 테이블 데이터를 CSV 파일로 저장 |
필터링 | 특정 열을 기준으로 필터링 기능 구현 |
예제 코드: 행 추가 기능 구현
def add_row(self):
row_position = self.table.rowCount()
self.table.insertRow(row_position)
self.table.setItem(row_position, 0, QTableWidgetItem("새로운 이름"))
self.table.setItem(row_position, 1, QTableWidgetItem("나이"))
self.table.setItem(row_position, 2, QTableWidgetItem("직업"))
반응형
'코딩취미 > Python' 카테고리의 다른 글
PySide6에서 QTableWidget UI 커스터마이징: 컬럼 숨기기, 셀 색상 변경, 팝업 기능 추가 (0) | 2025.03.21 |
---|---|
PySide6에서 QTableWidget 헤더 및 테이블 스타일 설정하기 (0) | 2025.03.20 |
Python Matplotlib 완벽 가이드: 그래프 및 표 생성 방법 (0) | 2025.03.15 |
파이썬 Plotly로 그래프 만들기: (꺾은선, 막대, 산점도, 원형) (0) | 2025.03.14 |
파이썬으로 다양한 형태의 표 만들기: 가로표, 세로표 (PrettyTable, Pandas, HTML) (0) | 2025.03.14 |