이번 강좌에서는 PyQt5의 QTreeWidget
과 QTreeWidgetItem
을 사용하여 계층 구조의 아이템을 다루는 방법에 대해 알아보겠습니다. QTreeWidget
은 복잡한 데이터 구조를 손쉽게 표현할 수 있는 강력한 위젯입니다. 우리는 이 위젯을 활용하여 GUI 애플리케이션에서 데이터를 시각적으로 표현할 수 있습니다.
1. QTreeWidget 개요
QTreeWidget
은 PyQt5에서 제공하는 위젯 중 하나로, 트리 형태의 데이터를 표시하는 데 사용됩니다. 각 트리 노드는 QTreeWidgetItem
객체로 표현되며, 트리 구조를 사람들에게 시각적으로 이해하기 쉽게 보여주는 데 특화되어 있습니다. 이 위젯은 파일 탐색기, 정보 재구성, 데이터 관리 등 다양한 어플리케이션에서 사용됩니다.
2. QTreeWidget 구성 요소
트리 위젯에서 아이템을 표현하기 위해서는 QTreeWidgetItem
클래스를 사용합니다. 이 클래스는 트리 노드를 만들기 위한 기반 객체입니다. QTreeWidget
과 QTreeWidgetItem
의 관계는 다음과 같습니다.
QTreeWidget
는 트리 구조를 관리하며, 여러 개의QTreeWidgetItem
을 포함할 수 있습니다.QTreeWidgetItem
은 트리 노드를 나타내며, 여러 개의 자식 아이템을 가질 수 있습니다.
3. QTreeWidget 및 QTreeWidgetItem 사용 예제
여기서는 간단한 PyQt5 애플리케이션을 만들고 QTreeWidget
과 QTreeWidgetItem
의 기본적인 사용 방식에 대해 설명합니다.
예제 코드
import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QTreeWidget, QTreeWidgetItem
class TreeWidgetExample(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("QTreeWidget 예제")
self.setGeometry(100, 100, 600, 400)
# QTreeWidget 생성
self.tree_widget = QTreeWidget(self)
self.tree_widget.setHeaderLabels(["항목 이름", "설명"])
# 트리 아이템 생성
self.populate_tree()
# QTreeWidget을 메인 윈도우에 추가
self.setCentralWidget(self.tree_widget)
def populate_tree(self):
# 상위 아이템 추가
parent_item1 = QTreeWidgetItem(self.tree_widget, ["부모 아이템 1", "부모 아이템 1 설명"])
parent_item2 = QTreeWidgetItem(self.tree_widget, ["부모 아이템 2", "부모 아이템 2 설명"])
# 자식 아이템 추가
child_item1 = QTreeWidgetItem(parent_item1, ["자식 아이템 1.1", "자식 아이템 1.1 설명"])
child_item2 = QTreeWidgetItem(parent_item1, ["자식 아이템 1.2", "자식 아이템 1.2 설명"])
child_item3 = QTreeWidgetItem(parent_item2, ["자식 아이템 2.1", "자식 아이템 2.1 설명"])
# '부모 아이템' 확장
parent_item1.addChild(child_item1)
parent_item1.addChild(child_item2)
parent_item2.addChild(child_item3)
if __name__ == "__main__":
app = QApplication(sys.argv)
window = TreeWidgetExample()
window.show()
sys.exit(app.exec_())
위 코드는 QTreeWidget
을 사용하여 부모 노드와 자식 노드를 구성하는 기본적인 예제입니다. populate_tree
메서드에서 트리 아이템을 생성하고 addChild
메서드를 통해 자식 아이템을 추가합니다.
4. 아이템 선택 및 이벤트 처리
트리 위젯에서 아이템을 선택하면 특정 작업을 수행할 수 있습니다. 예를 들어, 아이템을 클릭했을 때 해당 아이템의 정보를 출력하는 기능을 추가해 보겠습니다.
아이템 선택 이벤트 처리 예제
from PyQt5.QtCore import Qt
class TreeWidgetExample(QMainWindow):
def __init__(self):
super().__init__()
# ... (기존 코드)
# 아이템 선택 시 슬롯 함수 연결
self.tree_widget.itemClicked.connect(self.on_item_clicked)
def on_item_clicked(self, item):
print(f"선택된 아이템: {item.text(0)}") # 0은 첫 번째 열
# ... (기존 코드)
위 코드에서 itemClicked
시그널을 통해 아이템 클릭 이벤트를 처리합니다. 선택된 아이템의 텍스트를 출력하는 on_item_clicked
메서드에서 간단한 정보를 확인할 수 있습니다.
5. 아이템 관리
트리 위젯에서 아이템을 관리하는 것은 매우 중요합니다. 아래에서는 아이템 추가, 수정 및 삭제 방법을 살펴보겠습니다.
아이템 추가하기
def add_item(self):
new_item = QTreeWidgetItem(["새 아이템", "새 아이템 설명"])
self.tree_widget.addTopLevelItem(new_item)
# 메서드 호출
self.add_item() # 새로운 아이템 추가
위 코드에서 add_item
메서드는 QTreeWidget
에 새로운 최상위 아이템을 추가합니다.
아이템 삭제하기
def delete_item(self):
selected_items = self.tree_widget.selectedItems()
if selected_items:
for item in selected_items:
index = self.tree_widget.indexOfTopLevelItem(item)
if index >= 0:
self.tree_widget.takeTopLevelItem(index)
else:
parent = item.parent()
if parent:
parent.removeChild(item)
위의 delete_item
메서드는 현재 선택된 아이템을 삭제하는 기능을 포함하고 있습니다. 최상위 아이템과 자식 아이템 모두를 처리할 수 있습니다.
아이템 수정하기
def edit_item(self, item, new_text):
item.setText(0, new_text) # 첫 번째 열의 텍스트 수정
아이템 수정을 위해 setText
메서드를 사용하여 특정 열의 텍스트를 변경합니다.
6. QTreeWidget의 스타일 및 속성 조정
QTreeWidget의 외관 및 동작을 조정하여 사용자에게 더 나은 경험을 제공할 수 있습니다. 다양한 옵션 및 스타일을 지정할 수 있습니다.
헤더 및 라벨 설정
self.tree_widget.setHeaderLabels(["헤더1", "헤더2"]) # 헤더 텍스트 설정
self.tree_widget.setColumnWidth(0, 200) # 첫 번째 열 너비 조정
위 코드를 사용하여 트리 위젯의 헤더 텍스트와 열 너비를 조정합니다. 이를 통해 UI를 더욱 직관적으로 만들 수 있습니다.
아이템 아이콘 추가하기
from PyQt5.QtGui import QIcon
item = QTreeWidgetItem(["아이콘이 있는 아이템", "설명"])
item.setIcon(0, QIcon("path/to/icon.png")) # 노드에 아이콘 추가
트리 아이템에 아이콘을 추가하려면 setIcon
메서드를 사용하여 아이템의 특정 열에 아이콘을 설정합니다.
7. 결론
이번 강좌에서는 QTreeWidget
과 QTreeWidgetItem
을 사용하여 아이템을 다루는 기본적인 방법을 배웠습니다. 다양한 트리 구조의 데이터를 표시하고 관리하는 방법에 대해 알아보았습니다. 사용자 인터페이스(UI)의 일관성을 높이고 데이터를 효과적으로 표현하기 위해 QTreeWidget
은 매우 유용한 선택입니다. 앞으로 PyQt를 활용하여 더욱 복잡한 GUI 어플리케이션으로 발전할 수 있도록 연습해보십시오.
다음 강좌에서는 PyQt5의 다른 위젯 및 레이아웃 관리에 대해 살펴보겠습니다. 감사합니다!