개요
PySide6를 사용하여 GUI 애플리케이션을 개발할 때,
QListWidget은 목록을 표시하고 관리하는 데 매우 유용한 위젯이다!
종종 리스트 항목에 추가적인 데이터를 함께 저장하고 관리해야 하는 경우가 있는데,
이번 게시글에서는 QListWidgetItem에 Qt.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 슬롯에 연결하여 아이템 클릭 시 동작을 정의
