[python] 파이썬으로 사용자 인터페이스의 테이블뷰와 트리뷰 처리하기

파이썬은 다양한 GUI 프레임워크를 통해 사용자 인터페이스를 만들 수 있는 많은 기능을 제공합니다. 테이블 뷰와 트리 뷰는 대규모 데이터를 효율적으로 표시하고 조작하는 데 도움을 주는 중요한 컴포넌트입니다. 이번 포스트에서는 파이썬을 사용하여 테이블 뷰와 트리 뷰를 다루는 방법에 대해 알아보겠습니다.

파이썬과 GUI 프레임워크

파이썬은 Tkinter, PyQt, Kivy, WxPython 등 다양한 GUI 프레임워크를 지원합니다. 각 프레임워크는 고유한 특징과 장단점을 가지고 있으며, 개발자의 요구에 맞게 선택하여 사용할 수 있습니다.

테이블 뷰

테이블 뷰는 데이터를 행과 열의 형태로 표시하는 컴포넌트입니다. 파이썬에서는 QTableView를 사용하여 테이블 뷰를 생성하고 데이터를 표시할 수 있습니다. 예를 들어 PyQt를 사용하여 테이블 뷰를 생성하고 데이터를 표시하는 코드는 다음과 같습니다.

from PyQt5.QtWidgets import QApplication, QTableView
from PyQt5.QtCore import QAbstractTableModel, Qt

class TableModel(QAbstractTableModel):
    def __init__(self, data):
        super(TableModel, self).__init__()
        self._data = data

    def rowCount(self, parent):
        return len(self._data)

    def columnCount(self, parent):
        return len(self._data[0])

    def data(self, index, role):
        if role == Qt.DisplayRole:
            return str(self._data[index.row()][index.column()])

data = [
    [1, 'apple', 3],
    [2, 'banana', 5],
    [3, 'cherry', 7]
]

app = QApplication([])
table = QTableView()
model = TableModel(data)
table.setModel(model)
table.show()
app.exec_()

위 코드에서는 PyQt를 사용하여 QTableView를 만들고, 데이터를 표시하기 위해 QAbstractTableModel을 상속받은 TableModel 클래스를 구현합니다.

트리 뷰

트리 뷰는 계층적인 데이터를 표시하는데 사용됩니다. 파이썬에서는 QTreeView를 사용하여 트리 뷰를 생성하고 데이터를 표시할 수 있습니다. 예를 들어 PyQt를 사용하여 트리 뷰를 생성하고 데이터를 표시하는 코드는 다음과 같습니다.

from PyQt5.QtWidgets import QApplication, QTreeView
from PyQt5.QtCore import QAbstractItemModel, QModelIndex, Qt

class TreeModel(QAbstractItemModel):
    def __init__(self, data):
        super(TreeModel, self).__init__()
        self._data = data

    def index(self, row, column, parent=QModelIndex()):
        if not self.hasIndex(row, column, parent):
            return QModelIndex()

        if not parent.isValid():
            parentItem = self._data
        else:
            parentItem = parent.internalPointer()

        childItem = parentItem[row]
        if childItem:
            return self.createIndex(row, column, childItem)
        else:
            return QModelIndex()

    def parent(self, index):
        if not index.isValid():
            return QModelIndex()

        childItem = index.internalPointer()
        parentItem = self._data
        return self.createIndex(parentItem.index(childItem), 0, parentItem)

    def rowCount(self, parent):
        if not parent.isValid():
            return len(self._data)
        return len(parent.internalPointer())

    def columnCount(self, parent):
        return 1

    def data(self, index, role):
        if role == Qt.DisplayRole:
            return index.internalPointer()

data = {
    'Fruits': ['Apple', 'Banana', 'Cherry'],
    'Vegetables': ['Carrot', 'Potato', 'Spinach']
}

app = QApplication([])
tree = QTreeView()
model = TreeModel(data)
tree.setModel(model)
tree.show()
app.exec_()

위 코드에서는 PyQt를 사용하여 QTreeView를 만들고, 데이터를 표시하기 위해 QAbstractItemModel을 상속받은 TreeModel 클래스를 구현합니다.

결론

파이썬을 사용하여 테이블 뷰와 트리 뷰를 다루는 방법에 대해 간략히 살펴보았습니다. GUI 프레임워크마다 조금씩 다르지만, 각 컴포넌트를 다루는 기본적인 원리는 비슷합니다. 데이터를 효율적으로 표시하고 조작하기 위해서는 테이블 뷰와 트리 뷰를 잘 활용하는 것이 중요합니다.