gpt4 book ai didi

python - QTreeWidget 中的目录树

转载 作者:太空宇宙 更新时间:2023-11-04 06:29:33 24 4
gpt4 key购买 nike

我正在使用 zipfiletarfile用于打开、提取和压缩文件的 Python 模块。
我需要在 QTreeWidget 中显示存档结构,但我不知道如何进行。为了获取信息,我使用了来自 this file 的函数 infos(path) .我想获得这样的东西(来自方舟):
alt text

例如,如果我收到此文件名:('GCI/PyFiles/prova3.py', 'GCI/', 'GCI/PyFiles/', 'GCI/Screenshots/', 'GCI/prova2.py' py', 'prova.py'),我想得到这个:

- prova.py
- GCI/
|
|- prova2.py
|- PyFiles/
|- prova3.py
|- Screenshots/

在我的 QTreeWidget 中。

谢谢,魔方

最佳答案

我不确定 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', '']]

关于python - QTreeWidget 中的目录树,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4606386/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com