2017-11-24 28 views
0

저는 파이썬을 처음 접했으니 제발 참아주십시오. 튜플에서 QTreeWidget을 채우려고하지만 너무 복잡해 보이지 않습니다.튜플에서 QTreeWidget을 채우는 방법?

TreeList = ({ 

    'Header1': ((
     'Item1', 
     'Item2', 
    )), 

    'Header2': ((
     'Item1', 
     'Item2' 
    )) 
}) 

아이디어는 내가처럼 보이는 QTreeWidget 만들 것입니다 : 나는 해결책을 찾기 위해 온라인으로 주위를 검색 한

ROOT 
    | 
    |-- Header1 
    | |-- Item1 
    | |-- Item2 
    | 
    |-- Header2 
     |-- Item1 
     |-- Item2 

을, 그러나 나는 시도 아무것도 작동하는 것 같다하지, 무엇을 것 이 문제를 해결하는 가장 좋은 방법입니다.

widget = QTreeWidget() 

for i in TreeList: 
    val = QTreeWidgetItem([i]) 
    widget.addTopLevelItem(val) 

for i in TreeList['Header1'] 
    val = QTreeWidgetItem([i]) 
    widget.Header1.addChild(val) # DONT THINK THIS IS RIGHT 

for i in TreeList['Header2'] 
    val = QTreeWidgetItem([i]) 
    widget.Header2.addChild(val) # DONT THINK THIS IS RIGHT 

첫 번째 for 루프가 작동하고 헤더가 루트 요소 아래에 나열되지만 두 번째 두 for 루프는 전혀 작동하지 않습니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까? 나는 문서를 통해 체질하고 모든 것을 내가하는 AddChild()를 사용할 것을 제안하지만 PyCharm는 말한다 :

'QTreeWidget'개체가 어떤 속성 '하는 AddChild'

내가 PyQt5 파이썬 3.6을 사용하고 있는데이 없습니다 . 감사! 아래 그림과 같이

답변

1

QTreeWidgetItem는 부모에게 직접 전달 될 수 있지만, 목록 또는 항목의 튜플이 필요합니다 :

import sys 

from PyQt5.QtWidgets import * 

TreeList = ({ 

    'Header1': ((
     'Item11', 
     'Item12', 
    )), 

    'Header2': ((
     'Item21', 
     'Item22' 
    )) 
}) 

app = QApplication(sys.argv) 

tree = QTreeWidget() 

for key, value in TreeList.items(): 
    root = QTreeWidgetItem(tree, [key]) 
    for val in value: 
     item = QTreeWidgetItem([val]) 
     root.addChild(item) 
     # Or 
     # QTreeWidgetItem(root, [val]) 

tree.expandAll() 
tree.show() 
sys.exit(app.exec_()) 

출력 :

enter image description here

+0

완벽하게 작동, 및 보인다 이 작업을 수행하는 데 가장 최적화 된 방법입니다. 고맙습니다! –

+0

당신은'root.addChild (QTreeWidgetItem ([val])'도 잘 작동하는 것처럼 보일 수 있습니다. –