트리 위젯은 데이터를 리스트 및 트리 형태로 표시하는 위젯입니다. 트리 위젯은 파워씬 스튜디오에서   항목을 드래그 & 드랍해서 추가 할수 있습니다.

트리 위젯은 아래와 같은 형태로 사용할수 있습니다.


  • 헤더가 포함된 리스트 형태로 데이터를 표시할 수 있습니다.

 

여러 줄의 헤더를 가진 리스트 형태로 표시하고 싶다면 [텍스트 테이블] 위젯을 참조하십시오.



  • 계층적인 구조를 가진 데이터를 트리 형태로 표시할 수 있습니다.
  • 체크박스를 사용하여 항목의 선택여부를 설정하거나 읽어올 수 있습니다.

 


 트리 위젯에서 제공하는 함수를 이용해 항목의 선택 이벤트를 받아 로직을 추가할 수 있습니다. 트리 위젯에서 지원하는 함수는 다음과 같습니다.

Methods

리턴 값

함 수

설 명


addData( texts )

트리 위젯의 데이터를 입력합니다. (리스트 형태로 표시할 때 사용)


clear()

트리 위젯의 데이터를 지우고 초기화합니다.


clearSelection()

트리 위젯의 모든 항목을 선택 취소합니다.


connectCurrentIndexChanged( )

트리위젯의 선택된 항목이 변경되었을 경우 변경 이벤트를 수신 합니다.

(리스트 모드에서만 동작합니다)


connectItemClicked( )

트리 위젯의 항목이 클릭되었을 클릭 이벤트를 수신 합니다.

int

count()

트리 위젯에 입력된 데이터의 수를 읽어옵니다. (리스트 형태로 표시할 때 사용)

list[str]

currentTextList()

현재 선택된 행의 텍스트를 얻어옵니다. (리스트 형태로 표시할 때 사용)

 int

currentIndex()

트리 위젯의 선택항목의 번호를 얻어옵니다. (리스트 형태로 표시할 때 사용)

TreeWidgetItem

currentItem()

트리 위젯의 선택항목을 얻어옵니다. (트리 형태로 표시할 때 사용)

 list[str]

textList( index )

트리 위젯의 항목의 행의 텍스트를 얻어옵니다. (리스트 형태로 표시할 때 사용)


fitColumn()

트리 위젯 항목의 넓이를 글자 크기에 맞춥니다.

list[TreeWidgetItem]

findItems(text,column,matchExactly)

주어진 컬럼과 문자열과 일지하는 아이템 목록을 반환합니다.

TreeWidgetItem

getItem(row)

주어진 행의 위젯 아이템을 반환 합니다.


insertData( index, texts )

트리 위젯의 데이터를 삽입합니다. (리스트 형태로 표시할 때 사용)

TreeWidgetItem

invisibleRootItem()

트리 위젯의 최상위 항목을 얻어옵니다. (트리 형태로 표시할 때 사용)

variant

itemData( row, column )

트리 위젯 항목에 설정한 데이터를 읽어옵니다. (리스트 형태로 표시할 때 사용)


removeData( index )

트리 위젯의 항목을 삭제합니다. (리스트 형태로 표시할 때 사용)


resizeSection( index, size )

트리 위젯의 컬럼 너비를 설정합니다.


restoreHeader()

컬럼의 넓이를 마지막 실행 했을 때의 크기로 설정합니다.


scrollToItem(item)

트리 위젯에 주어진 아이템으로 이동합니다.


setBackgroundColor(row, column,color)

주어진 행과 열에 해당하는 셀의 배경색을 변경 합니다.


setTextColor(row, column,color)

주어진 행과 열에 해당하는 셀의 글자색을 변경 합니다.


setCurrentIndex( index )

트리 위젯의 선택항목을 설정합니다. (리스트 형태로 표시할 때 사용)


setHeader( text )

트리 위젯의 header 를 설정합니다.


setHeaderCount( index )

트리 위젯의 header 항목의 수를 설정합니다.


setHeaders( texts )

트리 위젯의 다수의 header를 설정합니다.


setItemData( row, column, value )

트리 위젯의 항목에 데이터를 설정합니다. (리스트 형태로 표시할 때 사용)


setMaxDisplay( count )

트리 항목에 표시할 데이터의 수를 설정합니다.


setText( row, column, text )

트리 위젯 항목에 텍스트를 설정합니다. (리스트 형태로 표시할 때 사용)

str

text( row, column )

트리 위젯 항목의 텍스트를 읽어옵니다. (리스트 형태로 표시할 때 사용)



 

 addData( texts:문자열 리스트 )

 

 트리 위젯에 texts 데이터를 추가합니다. (리스트 형태로 표시할 때 사용)


  • texts : 추가될 문자열 리스트 형식의 데이터를 입력합니다.
    • 입력되는 데이터는 0번 열부터 입력됩니다.
  • addData를 반복하여 입력할 경우 항목의 index는 1씩 증가합니다.
  • 헤더의 개수에 따라 문자열리스트의 입력이 가능하며 더 적거나 크게 입력할 수 있습니다.
  • 문자열 리스트가 헤더의 개수를 초과할 경우 화면에는 보이지 않으나 데이터는 가지고 있습니다.


 예)

# 트리 위젯 개체를 얻어옵니다.

obj = canvas.getObject('TreeWidget');  


texts = ['헤더명 1', '헤더명 2', '헤더명 3'];

# 헤더 명을 texts 리스트로 설정합니다.

obj.setHeaders( texts );  


texts2 = ['1', '2', '3'];

# 0번 index에 text2 를 입력합니다.

obj.addData(texts2);  


texts2 = ['4', '5', '6'];

# 1번 index에 text2 를 입력합니다.

obj.addData(texts2);  


texts2 = ['7', '8'];

# 2번 index에 text2 를 입력합니다.

obj.addData(texts2);  


texts2 = ['', '9', '10'];

# 3번 index에 text2 를 입력합니다.

obj.addData(texts2);  


 



 

 clear()

 

 트리 위젯의 모든 데이터를 삭제하고 초기화합니다.


 예)

# 트리 위젯 개체를 얻어옵니다.

obj = canvas.getObject('TreeWidget');  

# 트리 위젯의 모든 데이터를 삭제하고 초기화합니다.

obj.clear();  


 



 

 clearSelection()

 

 트리 위젯의 모든 항목을 선택 취소합니다.


 예)

# 트리 위젯 개체를 얻어옵니다.

a = canvas.getObject('TreeWidget')

# 트리 위젯의 모든 항목을 선택 취소합니다.

a.clearSelection()  


 결과)


 




 

 connectCurrentIndexChanged  (  )

 

 트리위젯의 선택된 항목 변경시 변경 이벤트를 수신 합니다. 이벤트 수신 함수의 형식은 아래와 같으며 함수 이름은 고정되어 있습니다.


def onCurrentIndexChanged (obj,index)


obj : 선택 항목 변경 이벤트가 발생한 트리 위젯입니다.

index : 현재 선택된 인덱스 입니다.

 예)

# 트리 위젯의 선택된 항목 변경시 수신할 이벤트 핸들러 입니다.

def onCurrentIndexChanged(obj,index):

    #handle index change event

    return


c = canvas.getObject('tree')

# 선택 항목 변경 이벤트 수신을 활성화 합니다.

c.connectCurrentIndexChanged()




 connectItemClicked( )

 

 트리위젯의 항목을 클릭했을때 클릭 이벤트를 수신합니다. 이벤트 수신 함수의 형식은 아래와 같으며 함수 이름은 고정되어 있습니다.


def onCurrentIndexChanged (obj,item, column)


obj : 클릭 이벤트가 발생한 트리 위젯 입니다.

item : 클릭된 위젯 아이템입니다(트리 위젯 아이템).

column : 클릭된 column 입니다.


 예) 클릭한 항목의 텍스트를 읽습니다.

# 항목 선택시 수신할 함수를 정의 합니다.  

def onItemClicked(obj,item, column):   

      print '선택 항목 텍스트 : ' , item.text(column)


# 트리 위젯 개체를 얻어옵니다.

obj = canvas.getObject('TreeWidget')  

# 항목 클릭시 수신할 함수를 등록합니다.

obj.connectItemClicked( )  



 출력)

   

       선택 항목 텍스트 :  1-1



 예) 항목의 체크박스 클릭시 하위 항목은 모두체크, 상위 항목은 부분 체크 처리됩니다.

def checkStateAllChildItem(item, state):

      item.setCheckState(0, state)


      if item.childCount() == 0:

             return


      for v in range(0, item.childCount()):

             checkStateAllChildItem(item.child(v), state)


def onItemClicked(obj,item,column):

      state = item.checkState(0)

      if Qt.PartiallyChecked == state:

             return


      checkStateAllChildItem(item, state)


      parent = item.parent()

      while ( parent != None):

             childCount = parent.childCount()

             checkedCount= 0

             unCheckedCount= 0

             for v in range(0,childCount):

                    if parent.child(v).checkState(0)==Qt.Checked :

                           checkedCount+=1

                    elif parent.child(v).checkState(0)==Qt.Unchecked :

                           unCheckedCount+=1

             if ( childCount == checkedCount):

                    parent.setCheckState(0,Qt.Checked)

             elif (childCount ==unCheckedCount):

                    parent.setCheckState(0,Qt.Unchecked)

             else:

                    parent.setCheckState(0,Qt.PartiallyChecked)

             parent = parent.parent()


# 트리 위젯 개체를 얻어옵니다.

obj = canvas.getObject('TreeWidget') 

# 항목 클릭시 수신할 함수를 등록합니다. 

obj.connectItemClicked()  





 int count()


 트리 위젯 목록의 항목 수를 읽어옵니다. (리스트 형태로 표시할 때 사용)


 예)

# 트리 위젯 개체를 얻어옵니다.

a = canvas.getObject('TreeWidget')  

# 트리 위젯에 표시하는 데이터 개수를 읽어옵니다.

print a.count()  


 출력)

3





 TreeWidgetItem currentItem()

 

 트리 위젯의 현재 선택한 항목을 반환합니다. (트리 형태로 표시할 때 사용)


반환되는 TreeWidgetItem 개체에 대한 정보는 [트리 위젯 항목] 에서 참조하십시오.


 예)

# 트리 위젯 개체를 얻어옵니다.

obj = canvas.getObject('TreeWidget')  

# 현재 선택 항목을 얻어옵니다.

item = obj.currentItem()  

# 0번째 컬럼의 텍스트를 출력합니다.

print item.text(0)  



 출력)

1-1



 

 list[str] currentTextList()

 

 사용자가 현재 선택한 항목의 데이터를 문자열 리스트로 반환합니다. (리스트 형태로 표시할 때 사용)


  • 사용자가 트리위젯의 항목을 마우스로 클릭할 경우 해당 항목은 선택되었음을 나타내는 표시를 합니다.(파란색으로 항목 색상 변경)

.


 예)

# 트리 위젯 개체를 얻어옵니다.

obj = canvas.getObject('TreeWidget');  

# 사용자가 현재 선택한 트리 위젯 항목의 데이터를 문자열 리스트로 반환합니다.

val = obj.currentTextList();  

aa = '';

# 반복문을 통해 textsData(문자열 리스트)의 문자열을 얻어옵니다.

for x in val:  

    aa = aa +x;


print aa;


 출력)

456





 

 int currentIndex()

 

 사용자가 현재 선택한 항목의 번호를 반환합니다. (리스트 형태로 표시할 때 사용)


  • 사용자가 트리위젯의 항목을 마우스로 클릭할 경우 해당 항목은 선택되었음을 나타내는 표시를 합니다.(파란색으로 항목 색상 변경)
  • 하위 항목이 있을 경우 하위 항목 선택 후 currentIndex를 호출하면 -1을 반환합니다.


 예)

# 트리 위젯 개체를 얻어옵니다.

obj = canvas.getObject('TreeWidget');  

# 사용자가 현재 선택한 트리 위젯 항목의 번호를 반환합니다.

val = obj.currentIndex();  

print val;


 출력)

2





 list[str] textList( index:항목위치 )

 

 트리 위젯의 index 행에 위치한 텍스트를 반환합니다. (리스트 형태로 표시할 때 사용)


  • index : 항목의 인덱스를 입력합니다.


 예)

# 트리 위젯 개체를 얻어옵니다.

obj = canvas.getObject('TreeWidget');  


texts = ['헤더명 1', '헤더명 2', '헤더명 3'];

# 헤더 명을 texts 리스트로 설정합니다.

obj.setHeaders( texts );  


texts2 = ['1', '2', '3'];

# 0번 index에 text2 를 입력합니다.

obj.addData(texts2);  


texts2 = ['4', '5', '6'];

# 1번 index에 text2 를 입력합니다.

obj.addData(texts2);  


texts2 = ['a', 'b', 'c'];

# 0 번 index에 text2 항목을 삽입합니다.

obj.insertData( 0, texts2);  


# 2 번 index의 텍스트를 얻어옵니다.

textsData = obj.textList(2);    

aa = '';

# 반복문을 통해 textsData(문자열 리스트)의 문자열을 얻어옵니다.

for x in textsData:  

    aa = aa +x;


app.messageBox(aa);


 




 list<TreeWidgetItem*> findItems(text, column, matchExactly=false)

 

 주어진 컬럼과 문자열을 가진 아이템 목록을 반환 합니다.

 matchExactly ; True이면 문자열과 일치하는 아이템 목록을 반환 하며, False 인경우 주어진 문자열을 포함하는 아이템 목록을 반환 합니다.


 예)

obj = canvas.getObject('TreeWidget')


# 트리위젯에 0번 컬럼에 '지사' 문자열을 포함하는 아이템을 반환 합니다.

items = obj.findItems('지사',0,False)


결과) 트리 위젯에서 지사 문자열을 포함하는 항목을 반환 합니다.




 

 fitColumn()

 

 트리 위젯 항목의 열 너비를 글자 크기에 맞춥니다.


 예)

# 트리 위젯 개체를 얻어옵니다.

a = canvas.getObject('TreeWidget')  

# 트리 위젯 항목의 열 너비를 글자 크기에 맞춥니다.

a.fitColumn()  


 




 

 insertData( index:항목위치, texts:문자열 리스트 )

 

 트리 위젯에 texts 데이터를 index 위치에 삽입합니다. (리스트 형태로 표시할 때 사용)


  • index : 항목 데이터가 삽입될 인덱스를 입력합니다.
    • index는 위젯 상단부터 0으로 시작하여 1씩 증가합니다.
    • 기존의 위치에 있던 항목은 index 1씩 증가하여 위치합니다.
  • texts : 추가될 문자열 리스트 형식의 데이터를 입력합니다.


 예)

# 트리 위젯 개체를 얻어옵니다.

obj = canvas.getObject('TreeWidget');  


texts = ['헤더명 1', '헤더명 2', '헤더명 3'];

# 헤더 명을 texts 리스트로 설정합니다.

obj.setHeaders( texts );  


texts2 = ['1', '2', '3'];

# 0번 index에 text2 를 입력합니다.

obj.addData(texts2);  


texts2 = ['4', '5', '6'];

# 1번 index에 text2 를 입력합니다.

obj.addData(texts2);  


texts2 = ['a', 'b', 'c'];

# 0 번 index에 text2 항목을 삽입합니다.

obj.insertData( 0, texts2);  


 





 TreeWidgetItem invisibleRootItem()

 

 트리 위젯의 루트 항목을 반환합니다. (트리 형태로 표시할 때 사용)


반환되는 TreeWidgetItem 개체에 대한 정보는 [트리 위젯 항목] 에서 참조하십시오.


 예)

obj = canvas.getObject('TreeWidget')

obj.setHeaderCount(2)

obj.setHeaders(['Rank','Distribution'])

# 트리 위젯의 루트 항목을 반환합니다.

root = obj.invisibleRootItem()  

item = TreeWidgetItem()

item.setText(0,'TopLevel')

item.setText(1,'TopLevel/item')

root.addChild(item)


itemChild = TreeWidgetItem()

itemChild.setText(0,'Child1')

itemChild.setText(1,'Child1/item')

item.addChild(itemChild)


itemChild = TreeWidgetItem()

itemChild.setText(0,'Child2')

itemChild.setText(1,'Child2/item')

item.addChild(itemChild)





 

 variant itemData( row:행, column:열 )

 

 트리 위젯 항목에 설정한 데이터를 읽어옵니다. (리스트 형태로 표시할 때 사용)


  • row : 항목의 행 인덱스를 입력합니다.
  • column : 열 인덱스를 입력합니다.


 예)

# 트리 위젯 개체를 얻어옵니다.

obj = canvas.getObject('TreeWidget');  

# 1번 행의 1번 열에 데이터를 3으로 설정 합니다.

obj.setItemData(1, 1, 3)  

# 1번 행의 1번 열에 설정된 데이터를 읽어 옵니다.

var = obj.setItemData(1, 1)  

print var;


 출력)

3


 




 

 removeData( index:항목위치 )


 트리 위젯의 index 행에 위치한 항목을 삭제합니다. (리스트 형태로 표시할 때 사용)


  • index : 항목의 인덱스를 입력합니다.
    • 삭제된 index 이 후의 데이터는 index가 1씩 줄어듭니다.
  • 하위 항목을 가진 경우 하위 항목까지 삭제됩니다.


 예)

# 트리 위젯 개체를 얻어옵니다.

obj = canvas.getObject('TreeWidget');  


texts = ['헤더명 1', '헤더명 2', '헤더명 3'];

# 헤더 명을 texts 리스트로 설정합니다.

obj.setHeaders( texts );  


texts2 = ['1', '2', '3'];

# 0번 index에 text2 를 입력합니다.

obj.addData(texts2);  


texts2 = ['4', '5', '6'];

# 1번 index에 text2 를 입력합니다.

obj.addData(texts2);  


texts2 = ['a', 'b', 'c'];

# 0 번 index에 text2 항목을 삽입합니다.

obj.insertData( 0, texts2);  


# 0 번 index의 데이터를 삭제합니다.

obj.removeData(0);  


 




 

 resizeSection( index : 열, size : 너비 )


 트리 위젯의 열 인덱스를 입력하여 해당 열의 너비를 설정합니다.


 예)

# 트리 위젯 개체를 얻어옵니다.

o = canvas.getObject('TreeWidget')  

# 트리 위젯의 0번째 컬럼 너비를 100으로 설정합니다.

o.resizeSection(0, 100)  


 결과)

 



 

 restoreHeader()

 

 컬럼의 넓이를 마지막 실행했을 때의 크기로 설정합니다.


 예)

# 트리 위젯 개체를 얻어옵니다.

obj = canvas.getObject('TreeWidget');  

# 트리 위젯 컬럼의 넓이를 마지막 실행했을 때의 크기로 설정합니다.

obj.restoreHeader()  



 

 setCurrentIndex( index:항목위치 )

 

 입력한 index 항목위치가 선택되도록 합니다. (리스트 형태로 표시할 때 사용)


  • index : 항목의 인덱스를 입력합니다.
  • PowerScene 구동 시 사용자의 마우스 선택이 있기전까지 트리 위젯은 선택항목이 없습니다.


 예)

# 트리 위젯 개체를 얻어옵니다.

obj = canvas.getObject('TreeWidget');  

# 트리 위젯의 2번째 항목을 선택되도록 합니다.

obj.setCurrentIndex(2);  




 

 setItemData ( row:행, column:열, value:데이터값 )

 

 트리 위젯 항목의 행, 열 위치에 데이터값을 설정합니다. (리스트 형태로 표시할 때 사용)


  • row : 항목의 행 인덱스를 입력합니다.
  • column : 열 인덱스를 입력합니다.
  • value : 설정할 데이터값을 입력합니다.


 예)

# 트리 위젯 개체를 얻어옵니다.

obj = canvas.getObject('TreeWidget');  

# 1번 행의 1번 열에 데이터를 3으로 설정 합니다.

obj.setItemData(1, 1, 3)  


 




 

 setMaxDisplay( count:최대 데이터 갯수 )

 

 트리 위젯에 표시할 최대 데이터 갯수를 설정합니다.


  • count : 트리 위젯에 표시할 최대 데이터 갯수를 입력합니다.


 예)

# 트리 위젯 개체를 얻어옵니다.

a = canvas.getObject('TreeWidget')  

# 최대 30개의 데이터 표시

a.setMaxDisplay(30)  




 setText( row:행, column:열, text:표시 텍스트 )

 

 트리 위젯의 입력된 행, 열 위치에 표시될 텍스트를 설정합니다. (리스트 형태로 표시할 때 사용)


  • row : 행 인덱스를 입력합니다.
  • column : 열 인덱스를 입력합니다.
  • text : 표시될 텍스트를 입력합니다.


 예)

# 트리 위젯 개체를 얻어옵니다.

a = canvas.getObject('TreeWidget')  

# 0번 행, 1번 열의 항목의 텍스트를 '미국'으로 변경합니다.

a.setText(0, 1, '미국')  


 결과)

 





 scrollToItem(item)

 

 주어진 아이템을 트리 위젯에서 아이템 위치로 이동합니다. findItems과 같이 사용하여 특정 항목을 트리에서 찾을때 사용할수 있습니다.

 

 예)

obj = canvas.getObject('TreeWidget')


# 트리위젯에 0번 컬럼에 1-19' 문자열을 포함하는 아이템을 찾습니다.

items = obj.findItems('1-19',0,False)

# 문자열을 포함한 아이템이 있으면 해당 아이템 위치로 이동합니다.

if ( len(items)>0 ):

    obj.scrollToItem(items[0]);


결과) 아래와 같은 형태로 구성되어 있을때 scrollToItem을 호출하면 해당 아이템 위치로 이동합니다.





 

 setHeaderCount( index:헤더 개수 )


 트리 위젯의 헤더 개수를 설정합니다.


  • index : 설정될 헤더 갯수를 입력합니다.
    • index만큼 헤더가 설정되며 헤더의 명칭은 1부터 시작하고 1씩 증가합니다.


 예)

# 트리 위젯 개체를 얻어옵니다.

obj = canvas.getObject('TreeWidget');  

# 헤더의 개수를 3개로 설정합니다

obj.setHeaderCount( 3 );                  


 



 

 setHeader( text:헤더 이름 )

 

 트리 위젯의 헤더의 이름을 text로 설정합니다. 한 개의 헤더만을 설정합니다.


  • text : 설정될 헤더명 텍스트를 입력합니다.
    • setHeaderCount 로 다수의 헤더를 설정할 경우 setHeader는 첫번째 헤더만 변경됩니다.
    • setHeaderCount를 하지 않을 경우 하나의 헤더만 생성됩니다.
    • setHeader를 여러 번 할 경우 마지막에 입력한 text로 헤더가 설정됩니다.


 예)

# 트리 위젯 개체를 얻어옵니다.

obj = canvas.getObject('TreeWidget');  

# 헤더 명을 헤더명 1로 설정합니다.

obj.setHeader('헤더명 1');      


 



 

 setHeaders( texts:문자열 리스트 )

 

 트리 위젯의 헤더의 이름을 texts로 설정합니다. texts 문자열 리스트의 갯수에 따라 헤더의 갯수가 설정됩니다.


  • texts : 문자열 리스트의 형태로 입력합니다.


 예)

# 트리 위젯 개체를 얻어옵니다.

obj = canvas.getObject('TreeWidget');  

texts = ['헤더명 1', '헤더명 2', '헤더명 3'];

# 헤더 명을 texts 리스트로 설정합니다.

obj.setHeaders( texts );  


 




 str text( row:행, column:열 )

 

 트리 위젯의 입력된 행, 열 위치에 데이터를 읽어옵니다. (리스트 형태로 표시할 때 사용)


  • row : 행 인덱스를 입력합니다.
  • column : 열 인덱스를 입력합니다.


 


 예)

# 트리 위젯 개체를 얻어옵니다.

a = canvas.getObject('TreeWidget')  

# 0번 행, 1번 열의 항목에 표시된 데이터를 읽어옵니다.

print a.text(0,1)  


 출력)

군산