PYQT文件路径到树形结构

3 投票
1 回答
2507 浏览
提问于 2025-04-16 14:00

我正在做一个项目,需要把一些文件夹以树状图的形式展示出来。我有一份完整的文件路径列表,比如:

  • C:\folder1\file1
  • C:\folder1\folder11\file2
  • C:\folder2\file3

等等。

其实这些文件路径是存储在一个SQL服务器里的,我是通过运行查询来获取这些路径的。

我想把这些路径放到一个QTreeView里。

我试过使用QFileSystemModel和setNameFilters,但这不管用,因为你不能把路径放进过滤器里。

有人建议我使用QSortFilterProxyModel,但我对这个完全没有头绪。

谢谢。

汤姆。

1 个回答

2

请看看下面的例子是否对你有帮助:

import sys
from PyQt4 import QtGui, QtCore

class TestSortFilterProxyModel(QtGui.QSortFilterProxyModel):
    def __init__(self, parent=None):
        super(TestSortFilterProxyModel, self).__init__(parent)
        self.filter = ['folder0/file0', 'folder1/file1'];

    def filterAcceptsRow(self, source_row, source_parent):
        index0 = self.sourceModel().index(source_row, 0, source_parent)
        filePath = self.sourceModel().filePath(index0) 

        for folder in self.filter:
            if filePath.startsWith(folder) or QtCore.QString(folder).startsWith(filePath):
                return True;        
        return False    

class MainForm(QtGui.QMainWindow):
    def __init__(self, parent=None):
        super(MainForm, self).__init__(parent)

        model = QtGui.QFileSystemModel(self)
        model.setRootPath(QtCore.QDir.currentPath())

        proxy = TestSortFilterProxyModel(self)
        proxy.setSourceModel(model)     

        self.view = QtGui.QTreeView()
        self.view.setModel(proxy)

        self.setCentralWidget(self.view)

def main():
    app = QtGui.QApplication(sys.argv)
    form = MainForm()
    form.show()
    app.exec_()

if __name__ == '__main__':
    main()

希望这能帮到你,祝好!

撰写回答