Profile picture

[PySide6] QListWidget의 itemClicked() 시그널 활용해보기!

JaehyoJJAng2024년 09월 13일

개요

PySide6를 사용하여 GUI 애플리케이션을 개발할 때,

QListWidget은 목록을 표시하고 관리하는 데 매우 유용한 위젯이다!

종종 리스트 항목에 추가적인 데이터를 함께 저장하고 관리해야 하는 경우가 있는데,

이번 게시글에서는 QListWidgetItemQt.UserRole을 사용하여 추가 데이터를 저장하고 접근하는 간단한 방법을 소개해보려고 한다!



간단한 예제 코드

아래는 QListWidget에 두 개의 아이템을 추가하고,

각 아이템에 추가 데이터를 저장한 후, 아이템을 클릭했을 때 해당 데이터를 출력하는 간단한 예제이다.

import sys
from PySide6.QtWidgets import QApplication, QListWidget, QListWidgetItem
from PySide6.QtCore import Qt

def main():
    app = QApplication(sys.argv)

    # QListWidget 생성
    list_widget = QListWidget()

    # 아이템과 추가 데이터 정의
    apt_data_1 = {"이름": "아파트 A", "가격": "500억"}
    apt_data_2 = {"이름": "아파트 B", "가격": "200억"}

    # QListWidgetItem 생성 및 데이터 설정
    item1 = QListWidgetItem("아파트 A")
    item1.setData(Qt.UserRole, apt_data_1)  # Qt.UserRole에 데이터 저장
    list_widget.addItem(item1)

    item2 = QListWidgetItem("아파트 B")
    item2.setData(Qt.UserRole, apt_data_2)
    list_widget.addItem(item2)

    # 아이템 클릭 시 데이터 출력 함수
    def on_item_clicked(item):
        data = item.data(Qt.UserRole)  # Qt.UserRole에서 데이터 가져오기
        print(f"선택된 아이템: {item.text()}, 데이터: {data}")

    # 시그널과 슬롯 연결
    list_widget.itemClicked.connect(on_item_clicked)

    # QListWidget 표시
    list_widget.show()
    sys.exit(app.exec())

if __name__ == "__main__":
    main()


코드 설명

1. QListWidget 생성

list_widget = QListWidget()

QListWidget 객체를 생성하여 리스트를 표시할 준비


2. 아이템과 추가 데이터 정의

apt_data_1 = {"이름": "아파트 A", "가격": "500억"}
apt_data_2 = {"이름": "아파트 B", "가격": "200억"}

각 아파트의 이름과 가격 정보를 딕셔너리 형태로 정의


3. QListWidgetItem 생성 및 데이터 설정

item1 = QListWidgetItem("아파트 A")
item1.setData(Qt.UserRole, apt_data_1)  # Qt.UserRole에 데이터 저장
list_widget.addItem(item1)

item2 = QListWidgetItem("아파트 B")
item2.setData(Qt.UserRole, apt_data_2)
list_widget.addItem(item2)
  • QListWidgetItem 객체를 생성하고, 표시할 텍스트를 설정
  • setData 메서드를 사용하여 Qt.UserRole 역할에 추가 데이터를 저장
  • addItem 메서드를 통해 리스트 위젯에 아이템을 추가

4. 아이템 클릭 시 데이터 출력 함수

def on_item_clicked(item):
    data = item.data(Qt.UserRole)  # Qt.UserRole에서 데이터 가져오기
    print(f"선택된 아이템: {item.text()}, 데이터: {data}")

리스트 아이템이 클릭되면 호출되는 함수로,

클릭된 아이템의 Qt.UserRole에 저장된 데이터를 가져와 출력.


5. 시그널과 슬롯 연결

list_widget.itemClicked.connect(on_item_clicked)

itemClicked 시그널을 on_item_clicked 슬롯에 연결하여 아이템 클릭 시 동작을 정의


Loading script...