如何从元组填充QTreeWidget?

时间:2017-11-24 23:54:34

标签: python python-3.x pyqt5 qtreewidget qtreewidgetitem

我对Python很陌生,所以请耐心等待。我试图从一个元组中填充一个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工作,并且标题列在根元素下,但是后两个for循环根本不起作用。我究竟做错了什么?我已经对文档进行了筛选,一切都表明我应该使用addChild(),但PyCharm说:

  

' QTreeWidget'对象没有属性' addChild'

我使用Python 3.6和PyQt5。谢谢!

1 个答案:

答案 0 :(得分:2)

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