从给定列表创建 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_())
给定一个字符串列表,我试图在树视图中填充项目。 这是我的代码:
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_())