2017-11-24 10 views
0

私はPythonにはかなり新しいので、私に同行してください。私は、タプルから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-loopが動作し、ヘッダーがルート要素の下に表示されますが、2番目の2つのfor-loopはまったく機能しません。私は間違って何をしていますか?私は、ドキュメントふるいにかけてきたすべてが、私はにaddChild()を使用すべきであることを示唆しているが、PyCharmは言う:

「QTreeWidget」オブジェクトには、属性「にaddChild」

私はPyQt5でのPython 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])'もうまくいくようです。 –

関連する問題