【问题标题】:Directory tree in a QTreeWidgetQTreeWidget 中的目录树
【发布时间】:2011-06-04 03:09:36
【问题描述】:

我正在使用zipfiletarfile Python 模块来打开、提取和压缩档案。
我需要在 QTreeWidget 中显示存档结构,我不知道该怎么做。要获取信息,我使用来自this file 的函数infos(path)。 我想获得这样的东西(来自 Ark):

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

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

在我的 QTreeWidget 中。

谢谢你, 魔方

【问题讨论】:

    标签: python directory pyqt4 qtreewidget


    【解决方案1】:

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

    【讨论】:

    • 非常感谢!!你救了我!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-21
    • 1970-01-01
    • 1970-01-01
    • 2017-08-22
    • 2010-09-12
    • 2013-02-06
    相关资源
    最近更新 更多