PYTHON GUI

[ PySide6 ] QHeaderView : 테이블 헤더 커스터마이징 방법

나루하루001 2025. 5. 27. 23:32
반응형
목차
  1. QHeaderView란 무엇인가?
  2. QHeaderView의 기본 사용법
  3. ResizeMode 설정하기
  4. 헤더 스타일 커스터마이징
  5. 헤더 정렬 및 소팅 기능 구현
  6. 헤더 섹션 숨기기와 이동하기
  7. 헤더 컨텍스트 메뉴 추가하기
  8. 자주 발생하는 문제와 해결 방법
  9. 마무리



QHeaderView란 무엇인가?


QHeaderView는 PySide6에서 테이블의 행과 열 헤더를 관리하는 위젯입니다.

테이블에서 가장 위쪽에 있는 열 이름들과 가장 왼쪽에 있는 행 번호들이 바로 QHeaderView를 통해 표시됩니다.

쉽게 이해하기

엑셀을 생각해보세요! 엑셀에서 A, B, C... 로 표시되는 열 이름들과 1, 2, 3... 으로 표시되는 행 번호들이 있습니다. PySide6에서는 이 부분을 QHeaderView라는 특별한 위젯으로 관리합니다.

 

QHeaderView는 단순히 헤더를 표시하는 것 외에도 다양한 기능을 제공합니다:

1. 열/행 크기 조절

2. 열/행 정렬 및 소팅

3. 헤더 스타일 커스터마이징

4. 헤더 섹션 숨기기/보이기

5. 헤더 섹션 이동 (드래그 앤 드롭)

 

QHeaderView는 주로 QTableView, QTableWidget, QTreeView와 같은 테이블 형태의 위젯과 함께 사용됩니다.

이러한 위젯들은 horizontalHeader()와 verticalHeader() 메서드를 통해 QHeaderView 객체에 접근할 수 있게 해줍니다.

 

QHeaderView의 기본 사용법


QHeaderView를 사용하기 위해서는

먼저 QTableWidget이나 QTableView와 같은 테이블 위젯이 필요합니다.

 

다음은 PySide6에서 QHeaderView의 기본적인 사용법을 보여주는 예제입니다:

import sys
from PySide6.QtWidgets import QApplication, QMainWindow, QTableWidget, QTableWidgetItem
from PySide6.QtCore import Qt

class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        
        self.setWindowTitle("QHeaderView 기본 예제")
        self.setGeometry(100, 100, 600, 400)
        
        # QTableWidget 생성
        self.table = QTableWidget(self)
        self.table.setRowCount(5)
        self.table.setColumnCount(3)
        self.setCentralWidget(self.table)
        
        # 테이블에 데이터 추가
        for row in range(5):
            for col in range(3):
                self.table.setItem(row, col, QTableWidgetItem(f"항목 {row+1}-{col+1}"))
        
        # 열 헤더 텍스트 설정
        self.table.setHorizontalHeaderLabels(["이름", "나이", "직업"])
        
        # 행 헤더 텍스트 설정
        self.table.setVerticalHeaderLabels(["행 1", "행 2", "행 3", "행 4", "행 5"])
        
        # QHeaderView 객체 가져오기
        horizontal_header = self.table.horizontalHeader()
        vertical_header = self.table.verticalHeader()
        
        # 헤더 기본 설정
        horizontal_header.setHighlightSections(True)  # 선택 시 헤더 강조 표시
        horizontal_header.setStretchLastSection(True)  # 마지막 열을 테이블 너비에 맞게 늘림

if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = MainWindow()
    window.show()
    sys.exit(app.exec())

 

이 코드는 3개의 열과 5개의 행을 가진 기본 테이블을 생성하고,

열 헤더와 행 헤더의 텍스트를 설정합니다. 또한 QHeaderView의 몇 가지 기본 설정을 보여줍니다.

 

QHeaderView 객체 가져오기

 

QTableWidget이나 QTableView에서 QHeaderView 객체에 접근하는 방법은 다음과 같습니다:

# 수평(열) 헤더 가져오기
horizontal_header = table.horizontalHeader()

# 수직(행) 헤더 가져오기
vertical_header = table.verticalHeader()

이렇게 가져온 QHeaderView 객체를 통해 헤더의 다양한 속성과 동작을 설정할 수 있습니다.

 

ResizeMode 설정하기


QHeaderView에서 가장 중요한 기능 중 하나는

열(또는 행)의 크기 조절 방식을 설정하는 것입니다.

이를 위해 setSectionResizeMode() 메서드를 사용합니다.

 

ResizeMode 종류

 

PySide6의 QHeaderView는 다음과 같은 ResizeMode를 제공합니다:

1. QHeaderView.Interactive: 사용자가 마우스로 헤더 경계를 드래그하여 크기를 조절할 수 있습니다.

2. QHeaderView.Stretch: 테이블의 전체 너비(또는 높이)에 맞게 섹션이 자동으로 늘어납니다.

3. QHeaderView.Fixed: 섹션 크기가 고정되며, 사용자나 자동 조절에 의해 변경되지 않습니다.

4. QHeaderView.ResizeToContents: 섹션의 내용에 맞게 자동으로 크기가 조절됩니다.

초보자를 위한 팁

ResizeMode는 테이블 열이 어떻게 크기가 조절되는지를 결정합니다:
- Interactive: "사용자가 마우스로 조절할 수 있어요!"
- Stretch: "테이블 크기가 변하면 자동으로 늘어나거나 줄어들어요!"
- Fixed: "크기가 고정되어 있어요, 바꿀 수 없어요!"
- ResizeToContents: "내용물에 맞춰서 자동으로 크기가 정해져요!"

ResizeMode 설정 예제

 

다음은 다양한 ResizeMode를 설정하는 예제입니다:

import sys
from PySide6.QtWidgets import QApplication, QMainWindow, QTableWidget, QTableWidgetItem, QHeaderView
from PySide6.QtCore import Qt

class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        
        self.setWindowTitle("QHeaderView ResizeMode 예제")
        self.setGeometry(100, 100, 600, 400)
        
        # QTableWidget 생성
        self.table = QTableWidget(self)
        self.table.setRowCount(5)
        self.table.setColumnCount(4)
        self.setCentralWidget(self.table)
        
        # 테이블에 데이터 추가
        for row in range(5):
            for col in range(4):
                self.table.setItem(row, col, QTableWidgetItem(f"항목 {row+1}-{col+1}"))
        
        # 열 헤더 텍스트 설정
        self.table.setHorizontalHeaderLabels(["Interactive", "Stretch", "Fixed", "ResizeToContents"])
        
        # QHeaderView 객체 가져오기
        header = self.table.horizontalHeader()
        
        # 각 열에 다른 ResizeMode 설정
        header.setSectionResizeMode(0, QHeaderView.Interactive)  # 첫 번째 열: 사용자 조절 가능
        header.setSectionResizeMode(1, QHeaderView.Stretch)      # 두 번째 열: 자동 늘림
        header.setSectionResizeMode(2, QHeaderView.Fixed)        # 세 번째 열: 고정 크기
        header.setSectionResizeMode(3, QHeaderView.ResizeToContents)  # 네 번째 열: 내용에 맞춤
        
        # Fixed 모드인 열의 너비 설정
        self.table.setColumnWidth(2, 100)  # 세 번째 열의 너비를 100픽셀로 설정

if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = MainWindow()
    window.show()
    sys.exit(app.exec())

이 예제는 네 개의 열에 각각 다른 ResizeMode를 적용하여 그 차이를 보여줍니다.

 

모든 열에 동일한 ResizeMode 적용하기

 

모든 열에 동일한 ResizeMode를 적용하려면 다음과 같이 할 수 있습니다:

# 모든 열을 Interactive 모드로 설정
header.setSectionResizeMode(QHeaderView.Interactive)

# 모든 열을 내용에 맞게 자동 조절
header.setSectionResizeMode(QHeaderView.ResizeToContents)

 

헤더 스타일 커스터마이징


QHeaderView의 모양을 커스터마이징하여 테이블의 시각적 매력을 높일 수 있습니다.

다음은 헤더 스타일을 변경하는 몇 가지 방법입니다.

스타일시트(CSS) 적용하기

PySide6에서는 스타일시트(CSS)를 사용하여 헤더의 모양을 쉽게 변경할 수 있습니다:

import sys
from PySide6.QtWidgets import QApplication, QMainWindow, QTableWidget, QTableWidgetItem
from PySide6.QtCore import Qt

class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        
        self.setWindowTitle("QHeaderView 스타일 예제")
        self.setGeometry(100, 100, 600, 400)
        
        # QTableWidget 생성
        self.table = QTableWidget(self)
        self.table.setRowCount(5)
        self.table.setColumnCount(3)
        self.setCentralWidget(self.table)
        
        # 테이블에 데이터 추가
        for row in range(5):
            for col in range(3):
                self.table.setItem(row, col, QTableWidgetItem(f"항목 {row+1}-{col+1}"))
        
        # 열 헤더 텍스트 설정
        self.table.setHorizontalHeaderLabels(["이름", "나이", "직업"])
        
        # 스타일시트 적용
        self.table.horizontalHeader().setStyleSheet("""
            QHeaderView::section {
                background-color: #4a86e8;
                color: white;
                padding: 6px;
                border: 1px solid #3a7bd5;
                font-weight: bold;
                border-radius: 0px;
                text-align: center;
            }
            QHeaderView::section:hover {
                background-color: #3a7bd5;
            }
        """)
        
        # 행 헤더에도 스타일 적용
        self.table.verticalHeader().setStyleSheet("""
            QHeaderView::section {
                background-color: #f1f1f1;
                padding: 4px;
                border: 1px solid #d4d4d4;
                font-weight: normal;
            }
        """)

if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = MainWindow()
    window.show()
    sys.exit(app.exec())

 

이 예제는 열 헤더에 파란색 배경과 흰색 텍스트를 적용하고, 행 헤더에는 회색 배경을 적용합니다.

 

헤더 글꼴 변경하기

 

헤더의 글꼴을 변경하려면 다음과 같이 할 수 있습니다:

from PySide6.QtGui import QFont

# 헤더 글꼴 설정
font = QFont("Arial", 10, QFont.Bold)
self.table.horizontalHeader().setFont(font)

 

헤더 높이/너비 설정하기

 

헤더의 높이나 너비를 명시적으로 설정할 수 있습니다:

# 열 헤더의 높이 설정
self.table.horizontalHeader().setFixedHeight(40)

# 행 헤더의 너비 설정
self.table.verticalHeader().setFixedWidth(60)

 

반응형

헤더 정렬 및 소팅 기능 구현


QHeaderView는 테이블 데이터를 정렬하는 기능을 제공합니다.

헤더를 클릭하면 해당 열을 기준으로 데이터를 정렬할 수 있습니다.

 

소팅 활성화하기

 

테이블에서 소팅 기능을 활성화하는 방법은 다음과 같습니다:

import sys
from PySide6.QtWidgets import QApplication, QMainWindow, QTableWidget, QTableWidgetItem
from PySide6.QtCore import Qt

class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        
        self.setWindowTitle("QHeaderView 소팅 예제")
        self.setGeometry(100, 100, 600, 400)
        
        # QTableWidget 생성
        self.table = QTableWidget(self)
        self.table.setRowCount(5)
        self.table.setColumnCount(3)
        self.setCentralWidget(self.table)
        
        # 테이블에 데이터 추가
        data = [
            ["김철수", "28", "개발자"],
            ["이영희", "25", "디자이너"],
            ["박민수", "32", "관리자"],
            ["정지원", "22", "학생"],
            ["최동욱", "30", "마케터"]
        ]
        
        for row, row_data in enumerate(data):
            for col, value in enumerate(row_data):
                self.table.setItem(row, col, QTableWidgetItem(value))
        
        # 열 헤더 텍스트 설정
        self.table.setHorizontalHeaderLabels(["이름", "나이", "직업"])
        
        # 소팅 활성화
        self.table.setSortingEnabled(True)

if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = MainWindow()
    window.show()
    sys.exit(app.exec())

 

이 예제에서는 `setSortingEnabled(True)`를 호출하여 테이블의 소팅 기능을 활성화합니다.

이제 헤더를 클릭하면 해당 열을 기준으로 데이터가 정렬됩니다.

주의사항

소팅을 활성화할 때는 데이터를 모두 추가한 후에 setSortingEnabled(True)를 호출하는 것이 좋습니다. 소팅이 활성화된 상태에서 데이터를 추가하면 행 순서가 자동으로 변경될 수 있어 의도치 않은 결과가 발생할 수 있습니다.

커스텀 소팅 구현하기

 

숫자나 날짜와 같은 특별한 데이터 타입에 대해 커스텀 소팅을 구현할 수 있습니다:

import sys
from PySide6.QtWidgets import QApplication, QMainWindow, QTableWidget, QTableWidgetItem
from PySide6.QtCore import Qt

class NumericTableWidgetItem(QTableWidgetItem):
    def __lt__(self, other):
        # 숫자로 변환하여 비교
        return float(self.text()) < float(other.text())

class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        
        self.setWindowTitle("QHeaderView 커스텀 소팅 예제")
        self.setGeometry(100, 100, 600, 400)
        
        # QTableWidget 생성
        self.table = QTableWidget(self)
        self.table.setRowCount(5)
        self.table.setColumnCount(3)
        self.setCentralWidget(self.table)
        
        # 테이블에 데이터 추가
        data = [
            ["김철수", "28", "개발자"],
            ["이영희", "25", "디자이너"],
            ["박민수", "32", "관리자"],
            ["정지원", "22", "학생"],
            ["최동욱", "30", "마케터"]
        ]
        
        for row, row_data in enumerate(data):
            for col, value in enumerate(row_data):
                if col == 1:  # 나이 열은 NumericTableWidgetItem 사용
                    self.table.setItem(row, col, NumericTableWidgetItem(value))
                else:
                    self.table.setItem(row, col, QTableWidgetItem(value))
        
        # 열 헤더 텍스트 설정
        self.table.setHorizontalHeaderLabels(["이름", "나이", "직업"])
        
        # 소팅 활성화
        self.table.setSortingEnabled(True)

if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = MainWindow()
    window.show()
    sys.exit(app.exec())

이 예제에서는 `NumericTableWidgetItem` 클래스를 정의하여

"나이" 열이 텍스트가 아닌 숫자로 정렬되도록 합니다.

 

헤더 섹션 숨기기와 이동하기


QHeaderView는 헤더 섹션을 숨기거나 이동시키는 기능도 제공합니다.

 

헤더 섹션 숨기기

 

특정 열이나 행의 헤더를 숨기려면 다음과 같이 할 수 있습니다:

# 특정 열 헤더 숨기기
self.table.horizontalHeader().hideSection(1)  # 두 번째 열 헤더 숨기기

# 특정 행 헤더 숨기기
self.table.verticalHeader().hideSection(0)  # 첫 번째 행 헤더 숨기기

# 전체 행 헤더 숨기기
self.table.verticalHeader().setVisible(False)

 

헤더 섹션 이동 활성화 (계속)

# 행 헤더 이동 활성화
self.table.verticalHeader().setSectionsMovable(True)

 

다음은 헤더 섹션 이동을 활성화하는 전체 예제입니다:

import sys
from PySide6.QtWidgets import QApplication, QMainWindow, QTableWidget, QTableWidgetItem
from PySide6.QtCore import Qt

class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        
        self.setWindowTitle("헤더 섹션 이동 예제")
        self.setGeometry(100, 100, 600, 400)
        
        # QTableWidget 생성
        self.table = QTableWidget(self)
        self.table.setRowCount(5)
        self.table.setColumnCount(4)
        self.setCentralWidget(self.table)
        
        # 테이블에 데이터 추가
        for row in range(5):
            for col in range(4):
                self.table.setItem(row, col, QTableWidgetItem(f"항목 {row+1}-{col+1}"))
        
        # 열 헤더 텍스트 설정
        self.table.setHorizontalHeaderLabels(["이름", "나이", "직업", "주소"])
        
        # 헤더 섹션 이동 활성화
        self.table.horizontalHeader().setSectionsMovable(True)
        
        # 이동 가능함을 알려주는 툴팁 추가
        self.table.horizontalHeader().setToolTip("헤더를 드래그하여 열 순서를 변경할 수 있습니다")

if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = MainWindow()
    window.show()
    sys.exit(app.exec())

 

이 예제에서는 열 헤더를 드래그하여 순서를 변경할 수 있습니다.

사용자에게 이 기능을 알려주기 위해 툴팁도 추가했습니다.

 

헤더 섹션 순서 변경 감지하기

 

헤더 섹션의 순서가 변경되었을 때 이를 감지하고 처리하려면 sectionMoved 시그널을 연결합니다:

# 헤더 섹션 이동 감지
self.table.horizontalHeader().sectionMoved.connect(self.on_section_moved)

def on_section_moved(self, logical_index, old_visual_index, new_visual_index):
    print(f"열 이동: 논리적 인덱스 {logical_index}가 시각적 위치 {old_visual_index}에서 {new_visual_index}로 이동됨")
    # 여기에 필요한 처리 추가

 

 

헤더 컨텍스트 메뉴 추가하기


헤더에 우클릭 컨텍스트 메뉴를 추가하여 사용자가 열을 숨기거나 표시할 수 있는 기능을 구현할 수 있습니다.

import sys
from PySide6.QtWidgets import QApplication, QMainWindow, QTableWidget, QTableWidgetItem, QMenu, QAction
from PySide6.QtCore import Qt

class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        
        self.setWindowTitle("헤더 컨텍스트 메뉴 예제")
        self.setGeometry(100, 100, 600, 400)
        
        # QTableWidget 생성
        self.table = QTableWidget(self)
        self.table.setRowCount(5)
        self.table.setColumnCount(4)
        self.setCentralWidget(self.table)
        
        # 테이블에 데이터 추가
        for row in range(5):
            for col in range(4):
                self.table.setItem(row, col, QTableWidgetItem(f"항목 {row+1}-{col+1}"))
        
        # 열 헤더 텍스트 설정
        self.column_names = ["이름", "나이", "직업", "주소"]
        self.table.setHorizontalHeaderLabels(self.column_names)
        
        # 헤더 컨텍스트 메뉴 설정
        self.table.horizontalHeader().setContextMenuPolicy(Qt.CustomContextMenu)
        self.table.horizontalHeader().customContextMenuRequested.connect(self.show_header_menu)
    
    def show_header_menu(self, pos):
        header = self.table.horizontalHeader()
        
        # 컨텍스트 메뉴 생성
        menu = QMenu(self)
        
        # 각 열에 대한 표시/숨기기 액션 추가
        for col in range(self.table.columnCount()):
            column_name = self.column_names[col]
            is_hidden = header.isSectionHidden(col)
            
            action = QAction(column_name, self)
            action.setCheckable(True)
            action.setChecked(not is_hidden)
            action.setData(col)
            action.triggered.connect(self.toggle_column_visibility)
            
            menu.addAction(action)
        
        # 컨텍스트 메뉴 표시
        menu.exec(header.mapToGlobal(pos))
    
    def toggle_column_visibility(self):
        action = self.sender()
        if action:
            col = action.data()
            is_checked = action.isChecked()
            self.table.horizontalHeader().setSectionHidden(col, not is_checked)

if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = MainWindow()
    window.show()
    sys.exit(app.exec())

 

이 예제는 헤더에서 우클릭하면 컨텍스트 메뉴가 나타나고,

각 열을 표시하거나 숨길 수 있는 체크박스 메뉴 항목을 제공합니다.

초보자를 위한 설명

컨텍스트 메뉴란 마우스 우클릭 시 나타나는 메뉴를 말합니다. 위 예제에서는 헤더에서 우클릭하면 각 열을 표시하거나 숨길 수 있는 메뉴가 나타납니다. 이렇게 하면 사용자가 필요한 열만 선택적으로 볼 수 있어 테이블을 더 효율적으로 사용할 수 있습니다.

 

자주 발생하는 문제와 해결 방법


QHeaderView를 사용할 때 자주 발생하는 문제와 해결 방법을 살펴보겠습니다.

 

문제 1: Stretch 모드에서 열 너비를 수동으로 조절할 수 없음

 

문제: QHeaderView.Stretch 모드를 사용하면 테이블이 전체 너비를 채우지만, 사용자가 열 너비를 수동으로 조절할 수 없습니다.

 

해결 방법: 처음에는 Stretch 모드를 사용하고, 나중에 Interactive 모드로 전환하는 방법을 사용할 수 있습니다:

import sys
from PySide6.QtWidgets import QApplication, QMainWindow, QTableWidget, QTableWidgetItem, QHeaderView
from PySide6.QtCore import Qt, QTimer

class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        
        self.setWindowTitle("Stretch 후 Interactive 모드 예제")
        self.setGeometry(100, 100, 600, 400)
        
        # QTableWidget 생성
        self.table = QTableWidget(self)
        self.table.setRowCount(5)
        self.table.setColumnCount(3)
        self.setCentralWidget(self.table)
        
        # 테이블에 데이터 추가
        for row in range(5):
            for col in range(3):
                self.table.setItem(row, col, QTableWidgetItem(f"항목 {row+1}-{col+1}"))
        
        # 열 헤더 텍스트 설정
        self.table.setHorizontalHeaderLabels(["이름", "나이", "직업"])
        
        # 먼저 Stretch 모드 설정
        self.table.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch)
        
        # 약간의 지연 후 Interactive 모드로 전환
        QTimer.singleShot(100, self.make_columns_interactive)
    
    def make_columns_interactive(self):
        header = self.table.horizontalHeader()
        
        # 현재 각 열의 너비를 저장
        column_widths = []
        for i in range(self.table.columnCount()):
            column_widths.append(self.table.columnWidth(i))
        
        # 모든 열을 Interactive 모드로 변경
        for i in range(self.table.columnCount()):
            header.setSectionResizeMode(i, QHeaderView.Interactive)
        
        # 저장해둔 너비를 다시 적용
        for i, width in enumerate(column_widths):
            self.table.setColumnWidth(i, width)

if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = MainWindow()
    window.show()
    sys.exit(app.exec())

 

문제 2: 헤더 텍스트가 잘림

문제: 헤더 텍스트가 너무 길어서 잘리는 경우가 있습니다.

해결 방법: 헤더에 툴팁을 추가하고 ResizeToContents 모드를 사용하거나 최소 너비를 설정합니다:

# 헤더에 툴팁 추가
for col in range(self.table.columnCount()):
    header_item = self.table.horizontalHeaderItem(col)
    if header_item:
        header_item.setToolTip(header_item.text())

# ResizeToContents 모드 사용
self.table.horizontalHeader().setSectionResizeMode(QHeaderView.ResizeToContents)

# 또는 최소 너비 설정
self.table.horizontalHeader().setMinimumSectionSize(100)

 

문제 3: 헤더 클릭 이벤트 처리

문제: 헤더 클릭 이벤트를 처리하고 싶지만 소팅 기능은 비활성화하고 싶은 경우.

해결 방법: sectionClicked 시그널을 연결하고 소팅을 비활성화합니다:

# 소팅 비활성화
self.table.setSortingEnabled(False)

# 헤더 클릭 이벤트 연결
self.table.horizontalHeader().sectionClicked.connect(self.on_header_clicked)

def on_header_clicked(self, logical_index):
    print(f"헤더 클릭됨: {logical_index}")
    # 여기에 원하는 처리 추가

 

마무리


이 글에서는 PySide6의 QHeaderView를 사용하여

테이블 헤더를 커스터마이징하는 다양한 방법을 알아보았습니다.

 

QHeaderView는 테이블의 시각적 표현과 사용자 상호작용을 향상시키는 데 중요한 역할을 합니다.

주요 내용을 요약하면 다음과 같습니다:

1. QHeaderView 기본 사용법: QTableWidget이나 QTableView의 horizontalHeader()와 verticalHeader() 메서드를 통해 QHeaderView 객체에 접근할 수 있습니다.

2. ResizeMode 설정: Interactive, Stretch, Fixed, ResizeToContents 등 다양한 ResizeMode를 사용하여 열 너비 조절 방식을 설정할 수 있습니다.

3. 헤더 스타일 커스터마이징: 스타일시트(CSS)를 사용하여 헤더의 모양을 변경할 수 있습니다.

4. 헤더 정렬 및 소팅: setSortingEnabled() 메서드를 사용하여 테이블 데이터 정렬 기능을 활성화할 수 있습니다.

5. 헤더 섹션 숨기기와 이동: hideSection() 메서드로 특정 열이나 행을 숨기고, setSectionsMovable() 메서드로 헤더 섹션 이동을 활성화할 수 있습니다.

6. 헤더 컨텍스트 메뉴: 우클릭 컨텍스트 메뉴를 추가하여 사용자가 열을 숨기거나 표시할 수 있는 기능을 구현할 수 있습니다.

 

QHeaderView를 잘 활용하면 사용자에게 더 나은 테이블 경험을 제공할 수 있습니다. 특히 데이터가 많은 테이블에서는 열 너비 조절, 정렬, 숨기기 등의 기능이 매우 유용합니다.

초보자를 위한 팁

QHeaderView를 처음 사용한다면 다음 순서로 시작해보세요:

1. 기본 테이블 생성 후 horizontalHeader()로 헤더 객체 가져오기
2. setSectionResizeMode()로 열 너비 조절 방식 설정하기
3. setStyleSheet()로 헤더 스타일 변경하기
4. setSortingEnabled(True)로 정렬 기능 활성화하기

이렇게 하면 기본적인 QHeaderView 기능을 쉽게 활용할 수 있습니다!
[ 파이썬 관련 블로그 글 목록 ] 

파이썬(Python) 블로그 목록
반응형