Qt/PyQt5 강좌

PyQt5에서 QTableWidget를 마우스로 클릭하여 선택되는 것 방지

webnautes 2024. 8. 29. 22:28
반응형

PyQt5에서 QTableWidget를 마우스로 클릭하여 선택되는 것 방지를 하는 예제입니다.



2024. 8. 29 최초작성




실행결과 표를 클릭해도 선택이 되지 않습니다. 

 



전체 코드입니다. 표 선택을 방지하기 위해 QTableWidget 대신에 QTableWidget를 상속받은 NoSelectionTable를 사용합니다. 

 

import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QHeaderView
from PyQt5.QtWidgets import QTableWidget, QTableWidgetItem, QAbstractItemView
from PyQt5.QtCore import Qt
from PyQt5.QtGui import QColor

# 표 선택을 방지합니다.
class NoSelectionTable(QTableWidget):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.setSelectionMode(QAbstractItemView.NoSelection)
        self.setFocusPolicy(Qt.NoFocus)
        self.setEditTriggers(QAbstractItemView.NoEditTriggers)

class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("학생 성적표")
       
        self.table = NoSelectionTable(5, 4# 5행 4열의 테이블 생성
        self.setCentralWidget(self.table)
       
        # 열 제목 설정
        headers = ["학생 이름", "국어", "영어", "수학"]
        self.table.setHorizontalHeaderLabels(headers)
       
        # 헤더 스타일 설정
        header = self.table.horizontalHeader()
        header.setStyleSheet("QHeaderView::section { background-color: #2C3E50; color: white; }")
       
        # 테이블에 데이터 추가
        data = [
            ("김철수", 85, 92, 78),
            ("이영희", 92, 88, 95),
            ("박민수", 78, 85, 90),
            ("정수진", 95, 91, 88),
            ("장미란", 88, 79, 93)
        ]
       
        for row, (name, kor, eng, math) in enumerate(data):
            self.table.setItem(row, 0, QTableWidgetItem(name))
            self.table.setItem(row, 1, QTableWidgetItem(str(kor)))
            self.table.setItem(row, 2, QTableWidgetItem(str(eng)))
            self.table.setItem(row, 3, QTableWidgetItem(str(math)))
       
        # 열 너비 자동 조정
        self.table.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch)
       
        # 테이블 크기에 맞춰 윈도우 크기 조정
        self.table.resizeColumnsToContents()
        self.table.resizeRowsToContents()
        self.adjustSize()

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





반응형