[파이썬] PyQt 목록 뷰 (`QListView`) 및 목록 모델

PyQt는 파이썬으로 작성된 Qt 프레임워크의 파이썬 바인딩입니다. PyQt를 사용하면 Python을 기반으로 한 다양한 GUI 응용 프로그램을 쉽게 개발할 수 있습니다. 이번 포스팅에서는 PyQt의 QListView 위젯과 QAbstractListModel 클래스를 사용하여 목록 뷰와 목록 모델을 구현하는 방법에 대해 알아보겠습니다.

목록 뷰(QListView)란?

QListView는 Qt에서 제공하는 위젯으로, 행의 목록을 보여주는 기능을 제공합니다. 사진 갤러리, 파일 탐색기 등에서 사용자에게 여러 개의 항목을 표시하고 선택할 수 있는 목록 형태의 인터페이스를 만들 때 많이 사용됩니다.

목록 모델(QAbstractListModel)이란?

QAbstractListModel은 PyQt에서 제공하는 추상 클래스로, 목록 형태의 데이터를 제공하는 모델을 정의하는 데 사용됩니다. QAbstractListModel을 상속하여 사용자 정의 모델을 만들면, QListView와 같은 위젯에서 모델에 연결하여 데이터를 표시하고 제어할 수 있습니다.

예제 코드

다음은 PyQt를 사용하여 목록 뷰와 목록 모델을 구현하는 예제 코드입니다.

from PyQt5.QtGui import *
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *

class MyListModel(QAbstractListModel):
    def __init__(self, data=[], parent=None):
        super().__init__(parent)
        self.data = data
    
    def rowCount(self, parent=None):
        return len(self.data)
    
    def data(self, index, role=Qt.DisplayRole):
        if not index.isValid():
            return None
        
        if role == Qt.DisplayRole:
            return self.data[index.row()]
        
        return None

class MyListView(QWidget):
    def __init__(self):
        super().__init__()
        
        self.model = MyListModel(["Item 1", "Item 2", "Item 3"])
        self.view = QListView()
        self.view.setModel(self.model)
        
        layout = QVBoxLayout()
        layout.addWidget(self.view)
        
        self.setLayout(layout)

app = QApplication([])
window = MyListView()
window.show()
app.exec_()

이 예제에서는 MyListModel 클래스를 정의하여 QAbstractListModel을 상속받습니다. MyListModelrowCount 메서드와 data 메서드를 오버라이딩하여 목록의 행 수와 특정 인덱스에 대한 데이터를 제공합니다.

MyListView 클래스는 QListView를 포함하는 커스텀 위젯으로, MyListModel를 생성하여 QListView에 연결합니다. QListViewQAbstractListModel을 사용하여 모델의 데이터를 표시하고 사용자의 상호작용을 처리합니다.

마지막으로, QApplication을 생성하여 애플리케이션을 실행합니다. MyListView의 인스턴스를 생성하고 show 메서드로 화면에 표시합니다.

이 예제는 “Item 1”, “Item 2”, “Item 3”이라는 세 개의 항목을 갖는 목록을 만들고 QListView를 통해 화면에 표시합니다.

결론

PyQt의 QListViewQAbstractListModel을 사용하면 Python으로 다양한 목록 뷰 및 목록 모델을 구현할 수 있습니다. QListView는 사용자에게 항목을 표시하고 선택할 수 있는 인터페이스를 제공하며, QAbstractListModel은 목록 형태의 데이터를 제공하는 모델을 정의하는 데 사용됩니다.

이 예제 코드를 활용하여 PyQt로 목록 뷰와 목록 모델을 구현해보세요. 자신만의 커스텀 항목들을 추가하고 사용자 상호작용을 처리하는 기능을 추가할 수 있습니다. PyQt의 다양한 위젯과 클래스를 활용하여 GUI 애플리케이션을 개발하는데 도움이 될 것입니다.