我不确定 QTreeWidget 如何想要它的数据,但这是一种(可能是不好的方法)在内存中构建结构。
x = ('GCI/PyFiles/prova3.py', 'GCI/', \
'GCI/PyFiles/', 'GCI/Screenshots/', \
'GCI/prova2.py', 'prova.py')
structure = {}
for fn in x:
path = fn.split('/')
tmpd = structure
for p in path[:-1]:
try:
tmpd = tmpd[p]
except KeyError:
tmpd = tmpd[p] = {}
tmpd[path[-1]] = None
这将为您提供一个字典structure
,每个键要么是另一个字典(表示文件夹),要么None
表示该键是一个文件。
更好的方法是创建一个这样的类:
class Node(object):
def __init__(self):
self.dirs = {}
self.files = []
或类似的东西,你可以填充。如果我在 QT 编程时代没记错的话,QTreeWidget 需要一个数据源,因此您基本上可以弄清楚该源的外观并适当地填充它。也可能有这样做的选项,
[sp for _,sp in sorted(
(len(splitpath),splitpath) for splitpath in
(path.split('/') for path in x)
)
]
这将返回您:
[['prova.py'], ['GCI', ''], ['GCI', 'prova2.py'],
['GCI', 'PyFiles', ''], ['GCI', 'PyFiles', 'prova3.py'],
['GCI', 'Screenshots', '']]