从给定列表创建 QTreeView 层次结构

Creating QTreeView hierarchy from a given list

给定一个字符串列表,我试图在树视图中填充项目。 这是我的代码:

class MyModel(QtGui.QStandardItemModel):
    def __init__(self, parent=None):
        super(MyModel, self).__init__(parent)
        self.get_contents()

    def get_contents(self):
        self.clear()
        contents = [
            '|Base|character|Mike|body',
            '|Base|character|John',
            '|Base|camera'
        ]

        for content in contents:
            count = content.count('|')
            for index in range(count):
                index = index + 2
                split_path = content.split('|')[0:index]
                self.add_item(split_path)

    def add_item(self,name):
        item1 = QtGui.QStandardItem(name)
        self.appendRow([item1])

但是,我在树视图中获得的层次结构不可折叠(旁边带有小箭头图标的层次结构)并且每一行都附加有值并且可编辑(如果双击),我在其中执行不想。

我的代码的输出示例:

|Base
|Base|character
|Base|character|Mike
|Base|character|Mike|body
|Base
|Base|character
|Base|character|John
|Base
|Base|camera

其中有一些可重复的行...

这就是我所期待的:

|-- Base
|--|-- character
|--|--|-- Mike
|--|--|--|-- body
|--|-- character
|--|--|-- John
|--|-- camera

有什么见解吗?

如果这不是子项的一部分,则必须添加子项,还必须删除 split() 结果的第一个元素,因为它是一个空元素:

from PyQt4 import QtCore, QtGui


class MyModel(QtGui.QStandardItemModel):
    def __init__(self, parent=None):
        super(MyModel, self).__init__(parent)
        self.get_contents()

    def get_contents(self):
        self.clear()
        contents = [
            '|Base|character|Mike|body',
            '|Base|character|John',
            '|Base|camera'
        ]

        for content in contents:
            parent = self.invisibleRootItem()
            for word in content.split("|")[1:]:
                for i in range(parent.rowCount()):
                    item = parent.child(i) 
                    if item.text() == word:
                        it = item
                        break
                else:
                    it = QtGui.QStandardItem(word)
                    parent.setChild(parent.rowCount(), it)
                parent = it


if __name__ == '__main__':
    import sys

    app = QtGui.QApplication(sys.argv)

    w = QtGui.QTreeView()
    model = MyModel(w)
    w.setModel(model)
    w.show()
    w.expandAll()
    sys.exit(app.exec_())