728x90

QTableWidget 안의 항목 검색 및 복원 기능 구현 방법

들어가며

  • PyQt의 @QTableWidget@ 안의 항목을 검색하고, 원래의 내용을 복원 시키는 방법을 정리해본다.

 

방법

  • 검색하고자 하는 내용이 해당 행에 있을 경우 표시하고, 그렇지 않을 경우 숨기는 방법을 이용한다.
from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QTableWidget, QTableWidgetItem, QPushButton, QLineEdit

class SearchResetTableApp(QWidget):
    def __init__(self):
        super(SearchResetTableApp, self).__init__()

        self.init_ui()

    def init_ui(self):
        self.data = [
            ["John", "Doe", "28", "Male"],
            ["Jane", "Smith", "35", "Female"],
            ["Bob", "Johnson", "40", "Male"],
            ["Alice", "Williams", "25", "Female"],
        ]

        self.table = QTableWidget(self)
        self.table.setColumnCount(4)
        self.table.setHorizontalHeaderLabels(["First Name", "Last Name", "Age", "Gender"])
        self.populate_table(self.data)

        self.search_input = QLineEdit(self)
        self.search_button = QPushButton("Search", self)
        self.reset_button = QPushButton("Reset", self)

        self.search_button.clicked.connect(self.search_table)
        self.reset_button.clicked.connect(self.reset_table)

        layout = QVBoxLayout(self)
        layout.addWidget(self.search_input)
        layout.addWidget(self.search_button)
        layout.addWidget(self.reset_button)
        layout.addWidget(self.table)

        self.setLayout(layout)

        self.setGeometry(100, 100, 500, 300)
        self.setWindowTitle("Search and Reset Table")
        self.show()

    def populate_table(self, data):
        self.table.setRowCount(0)
        for row_data in data:
            row_position = self.table.rowCount()
            self.table.insertRow(row_position)
            for col_position, col_data in enumerate(row_data):
                self.table.setItem(row_position, col_position, QTableWidgetItem(str(col_data)))

    # 특정 항목 찾기
    def search_table(self):
        search_text = self.search_input.text().lower()

        for row in range(self.table.rowCount()):
            hide_row = True
            for col in range(self.table.columnCount()):
                item_text = self.table.item(row, col).text().lower()
                if search_text in item_text:
                    hide_row = False
                    break

            self.table.setRowHidden(row, hide_row)

    # 원래대로 돌리기
    def reset_table(self):
        for row in range(self.table.rowCount()):
            self.table.setRowHidden(row, False)

if __name__ == '__main__':
    app = QApplication([])
    window = SearchResetTableApp()
    app.exec_()
초기 프로그램 모습 검색 후의 모습 (@Doe@)
@[Reset]@ 버튼을 누른 모습  
 
728x90