给出一个字符串列表,我试图在树状视图中填充项目。 这是我的代码:
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
有什么见解吗?
答案 0 :(得分:1)
如果这不是子项的一部分,则必须添加子项,并且您必须删除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_())