PYQT文件到树的路径

时间:2011-03-19 01:24:42

标签: python pyqt

我正在开发一个项目,我需要在树视图中显示一些文件夹。我有一个完整的文件路径列表,如:

  • C:\ folder1中\文件1
  • C:\ folder1中\ folder11 \ file2的
  • C:\文件夹2 \ file3的

文件路径实际存储在我通过运行查询获取的sql server中。

我正在寻找一种方法将其放入QTreeView。

我已尝试使用QFileSystemModel并使用setNameFilters,但这不起作用,因为您无法在过滤器中输入路径。

有人建议使用QSortFilterProxyModel,但我不知道如何做到这一点。

感谢。

汤姆。

1 个答案:

答案 0 :(得分:1)

请看下面的例子是否适合你:

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()

希望这有帮助,尊重