본문으로 바로가기

파이썬(Python) PyQt5 QTreeWidget 사용하기

category 파이썬/PyQt5 2021. 11. 24. 11:03
반응형

 

트리 위젯(QTreeWidget)은 말 그대로 나무의 가지처럼 하위에 0개 이상의 자식을 가지는 구조를 말합니다. 컴퓨터에서 흔히 볼 수 있는 곳이 탐색기의 폴더 구조입니다. 이것을 PyQt5 에서는 QTreeWidget 으로 구현합니다. 기본 열(Column) 의 개수는 1개이며,  setColumnCount(column)로 지정할 수 있다.

 

1. 기본 위젯 구현하기

 

트리 위젯인 QTreeWidget 객체를 생성합니다. 다음은 QTreeWidget 내부에 들어갈 데이터를 추가합니다. QTreeWidgetItem() 객체를 생성하는데, 생성자의 인수값으로 QTreeWidget 의 객체를 입력합니다. 아래 샘플은 “A1”, “B1” 텍스트 데이터를 추가하는 내용입니다.

from PyQt5.QtWidgets import QTreeWidget, QTreeWidgetItem

# QTreeView 추가
self.root_tree = QTreeWidget()
item1 = QTreeWidgetItem(self.root_tree)
item1.setText(0, "A1")

item2 = QTreeWidgetItem(self.root_tree)
item2.setText(0, "B1")

 

QMainWindow 클래스를 상속받아 만든 화면에서는 QTreeWidget 을 화면에 추가하기 위해 setCentralWidget() 함수를 사용했습니다.

# 화면 전체에 추가
self.setCentralWidget(self.root_tree)

 

2. 트리 형태로 단계를 낮춰서 데이터 추가하기

 

하위에 데이터를 추가하는 방법은 간단합니다. 하위에 추가하고 싶은 상위 트리 항목의 QTreeWidgetItem 객체를 생성자로 인수로 추가하는 것입니다. 제일 상위에 있는 item1 QTreeWidgetItem(item1) 의 인수로 넘기면서 객체를 생성합니다.

# QTreeView 추가
self.root_tree = QTreeWidget()
item1 = QTreeWidgetItem(self.root_tree)
item1.setText(0, "A1")

item2 = QTreeWidgetItem(self.root_tree)
item2.setText(0, "B1")

sub_item1 = QTreeWidgetItem(item1)
sub_item1.setText(0, "A11")

sub_item2 = QTreeWidgetItem(sub_item1)
sub_item2.setText(0, "A111")

 

3. item 원하는 위치에 추가하기

 

QTreeWidget QTreeWidgetItem 객체를 만들어서 추가하는 또 다른 방법은 insertTopLevelItem() 함수를 이용하는 것입니다. 첫 번째 파라미터로 행 위치를 입력합니다. 0 은 최상위를 의미합니다. 1 A1 다음으로 추가가 됩니다.

# 제일 상위 트리에 추가하기
item3 = QTreeWidgetItem()
item3.setText(0, "C1")
self.root_tree.insertTopLevelItem(0, item3)

 

4. 제목 영역 수정하기

 

열의 제목을 수정하는 간단한 방법은 setHeaderLabels() 함수를 이용해서 수정하는 것입니다. 배열의 순서가 열 번호입니다. 기본 1, 2 ... 의 값을 “Header1”, “Header2” 로 변경합니다. 제목영역을 보여주고 싶지 않다면 setVisible() 함수를 이용해서 False 값으로 변경합니다.

self.root_tree = QTreeWidget()
self.root_tree.setHeaderLabels(["Header1", "Header2"])
self.root_tree.header().setVisible(True)
self.root_tree.setAlternatingRowColors(True)

 

또 다른 방법으로 QTreeWidget setHeaderItem() 함수를 이용합니다. QTreeWidgetItem 객체를 생성해서 추가합니다.

head_item = QTreeWidgetItem()
head_item.setText(0, "Header1")
head_item.setText(1, "Header2")

self.root_tree = QTreeWidget()
self.root_tree.setHeaderItem(head_item)

 

결과 화면은 다음과 같습니다.

반응형