개요
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
슬롯에 연결하여 아이템 클릭 시 동작을 정의