본문 바로가기
코딩취미/Python

PySide6에서 QTableWidget UI 커스터마이징: 컬럼 숨기기, 셀 색상 변경, 팝업 기능 추가

by 브링블링 2025. 3. 21.
반응형

PySide6에서 QTableWidget UI 커스터마이징: 컬럼 숨기기, 셀 색상 변경, 팝업 기능 추가

QTableWidget을 사용할 때 더욱 직관적인 UI를 만들기 위해 컬럼 숫자 숨기기, 셀의 배경 및 글자 색상 변경, 그리고 클릭 시 팝업 창 표시 등의 기능을 추가할 수 있습니다. 이 글에서는 해당 기능들을 구현하는 방법을 예제 코드와 함께 설명하겠습니다.


1. QTableWidget에서 컬럼 숫자(인덱스) 숨기기

QTableWidget의 왼쪽에 기본적으로 표시되는 **행 번호(인덱스)**를 숨기는 방법은 verticalHeader().setVisible(False) 메서드를 사용하면 됩니다.

예제 코드: 컬럼 숫자 숨기기

from PySide6.QtWidgets import QApplication, QTableWidget, QTableWidgetItem, QVBoxLayout, QWidget
import sys

class HideColumnNumbers(QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        layout = QVBoxLayout()
        
        self.table = QTableWidget(3, 3)
        self.table.setHorizontalHeaderLabels(["이름", "나이", "직업"])
        
        # 컬럼 숫자 숨기기
        self.table.verticalHeader().setVisible(False)
        
        data = [["홍길동", "25", "개발자"],
                ["김철수", "30", "디자이너"],
                ["이영희", "28", "마케터"]]
        
        for row, rowData in enumerate(data):
            for col, value in enumerate(rowData):
                self.table.setItem(row, col, QTableWidgetItem(value))
        
        layout.addWidget(self.table)
        self.setLayout(layout)

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

기능 요약: self.table.verticalHeader().setVisible(False)를 추가하면 컬럼 인덱스를 숨길 수 있습니다.


2. 특정 셀의 배경색 및 글자색 변경하기

셀의 배경색 및 글자색을 변경하려면 setBackground(QColor())setForeground(QColor())를 활용합니다.

예제 코드: 셀 배경색 및 글자색 변경하기

from PySide6.QtWidgets import QApplication, QTableWidget, QTableWidgetItem, QVBoxLayout, QWidget
from PySide6.QtGui import QColor
import sys

class CellColorChange(QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        layout = QVBoxLayout()
        self.table = QTableWidget(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 col == 1:  # 나이 열의 색상을 변경
                    item.setBackground(QColor(255, 223, 186))  # 연한 오렌지 배경색
                    item.setForeground(QColor(255, 0, 0))  # 빨간 글자색
                self.table.setItem(row, col, item)
        
        layout.addWidget(self.table)
        self.setLayout(layout)

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

 

기능 요약: 특정 열이나 행의 색상을 지정할 수 있으며, setBackground(QColor())를 활용하면 배경색을, setForeground(QColor())를 사용하면 글자색을 변경할 수 있습니다.

반응형

3. 셀이 클릭되었을 때 팝업 창 띄우기

셀을 클릭했을 때 팝업 창을 띄우려면 cellClicked 시그널을 사용하여 QMessageBox를 띄우면 됩니다.

예제 코드: 셀 클릭 시 팝업 표시

from PySide6.QtWidgets import QApplication, QTableWidget, QTableWidgetItem, QVBoxLayout, QWidget, QMessageBox
import sys

class TableWithPopup(QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        layout = QVBoxLayout()
        self.table = QTableWidget(3, 3)
        self.table.setHorizontalHeaderLabels(["이름", "나이", "직업"])
        
        data = [["홍길동", "25", "개발자"],
                ["김철수", "30", "디자이너"],
                ["이영희", "28", "마케터"]]
        
        for row, rowData in enumerate(data):
            for col, value in enumerate(rowData):
                self.table.setItem(row, col, QTableWidgetItem(value))
        
        # 셀 클릭 이벤트 연결
        self.table.cellClicked.connect(self.show_popup)
        
        layout.addWidget(self.table)
        self.setLayout(layout)

    def show_popup(self, row, col):
        item = self.table.item(row, col)
        if item:
            QMessageBox.information(self, "셀 클릭", f"선택한 값: {item.text()}")

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

기능 요약:

  • self.table.cellClicked.connect(self.show_popup)을 통해 셀 클릭 이벤트를 감지합니다.
  • QMessageBox.information()을 사용하여 셀에 입력된 값을 팝업 창으로 표시합니다.
반응형