티스토리 뷰

PyQt5에서 QListWidget 활용하기

PyQt5는 Python을 사용하여 데스크톱 애플리케이션을 개발할 수 있게 해주는 강력한 GUI 라이브러리입니다. 이 중 QListWidget은 리스트 형태의 데이터를 표시하고 조작하는 데 유용한 위젯입니다. 이 글에서는 QListWidget의 기본 사용법부터 고급 기능까지 자세히 살펴보겠습니다.

QListWidget 기본 개념

QListWidgetQListView를 상속받아 구현된 위젯으로, 리스트 형태로 데이터를 표시합니다. 각 항목은 QListWidgetItem 객체로 관리되며, 사용자는 이를 통해 항목을 추가, 제거, 수정할 수 있습니다. 또한, 다양한 이벤트와 메서드를 제공하여 사용자와의 상호작용을 쉽게 처리할 수 있습니다.

기본 사용법

다음은 QListWidget을 간단히 사용하는 예제입니다. 이 예제에서는 몇 가지 항목을 추가하고, 사용자가 항목을 클릭했을 때 메시지 박스를 표시합니다.

import sys
from PyQt5.QtWidgets import QApplication, QListWidget, QMessageBox

class ListWidgetDemo(QListWidget):
    def onItemClicked(self, item):
        QMessageBox.information(self, "항목 선택", "선택한 항목: " + item.text())

if __name__ == '__main__':
    app = QApplication(sys.argv)
    demoListWidget = ListWidgetDemo()
    demoListWidget.resize(300, 120)
    demoListWidget.addItem("옵션 1")
    demoListWidget.addItem("옵션 2")
    demoListWidget.addItem("옵션 3")
    demoListWidget.addItem("옵션 4")
    demoListWidget.setWindowTitle('QListWidget 데모')
    demoListWidget.itemClicked.connect(demoListWidget.onItemClicked)
    demoListWidget.show()
    sys.exit(app.exec_())

이 코드는 간단한 QListWidget 예제로, 리스트에 네 개의 항목을 추가하고 클릭 이벤트를 처리합니다.

주요 메서드 및 기능

  • addItem(): 단일 항목을 추가합니다.
  • addItems(): 여러 항목을 한 번에 추가할 수 있습니다.
  • insertItem(): 특정 위치에 항목을 삽입합니다.
  • clear(): 모든 항목을 제거합니다.
  • setCurrentItem(): 현재 선택된 항목을 설정합니다.
  • sortItems(): 항목을 정렬하여 표시합니다.

이러한 메서드를 활용하면 리스트의 내용을 동적으로 관리할 수 있습니다.

이벤트 처리

QListWidget은 다양한 이벤트를 제공합니다. 그 중 몇 가지 중요한 이벤트는 다음과 같습니다:

  • currentItemChanged: 현재 선택된 항목이 변경될 때 발생합니다.
  • itemClicked: 사용자가 특정 항목을 클릭할 때 발생합니다.

이러한 이벤트를 활용하면 사용자와의 상호작용을 더욱 풍부하게 만들 수 있습니다.

드래그 앤 드롭 기능

드래그 앤 드롭은 사용자 인터페이스에서 매우 직관적인 기능입니다. QListWidget은 이러한 드래그 앤 드롭 기능도 지원하여 두 개의 리스트 간에 아이템을 쉽게 옮길 수 있게 합니다. 다음 예제는 두 개의 QListWidget 간에 아이템을 드래그 앤 드롭하는 방법을 보여줍니다:

import sys
from PyQt5.QtWidgets import QApplication, QListWidget, QHBoxLayout, QWidget

class CustomDropList(QListWidget):
    def __init__(self):
        super(CustomDropList, self).__init__()
        self.setAcceptDrops(True)

    def handleDropEvent(self, dropEvent):
        sourceList = dropEvent.source()
        selectedItems = sourceList.selectedItems()
        for item in selectedItems:
            sourceList.takeItem(sourceList.indexFromItem(item).row())
            self.addItem(item)

class DragDropDemo(QWidget):
    def __init__(self):
        super(DragDropDemo, self).__init__()
        self.setWindowTitle('드래그 앤 드롭 QListWidget 데모')
        layout = QHBoxLayout()

        self.leftList = CustomDropList()
        self.rightList = QListWidget()

        initialItems = ['항목 A', '항목 B', '항목 C']
        self.rightList.addItems(initialItems)

        layout.addWidget(self.leftList)
        layout.addWidget(self.rightList)

        self.setLayout(layout)

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

이 예제에서는 오른쪽 리스트에서 왼쪽 리스트로 아이템을 드래그하여 옮길 수 있습니다. 이를 통해 사용자 경험을 더욱 향상시킬 수 있습니다.

 

응용 프로그램에서의 활용

실제 응용 프로그램에서는 QListWidget을 통해 다양한 형태의 데이터를 효과적으로 관리할 수 있습니다. 예를 들어 파일 탐색기에서 파일 목록을 표시하거나, 설정 메뉴에서 여러 옵션을 나열하는 데 사용할 수 있습니다. 또한 다중 선택 및 드래그 앤 드롭 기능은 복잡한 작업도 쉽게 처리할 수 있도록 도와줍니다.

 

결론적으로, QListWidget은 PyQt5에서 매우 유용한 위젯으로 다양한 애플리케이션에서 활용될 수 있습니다. 기본적인 사용법부터 고급 기능까지 익히면 더욱 강력하고 직관적인 사용자 인터페이스를 개발할 수 있을 것입니다.