2011-03-19 69 views
2

我正在处理一个需要在树视图中显示某些文件夹的项目。我有喜欢完整的文件路径列表:PYQT文件路径树

  • C:\文件夹1 \文件1
  • C:\文件夹1 \ folder11 \文件2
  • C:\文件夹2 \文件3

那么文件路径实际上存储在我通过运行查询获得的sql服务器。

我正在寻找一种方式将它放到QTreeView中。

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

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

谢谢。

汤姆。

回答

1

PLS,看看下面的例子会为你工作:

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

希望这会有所帮助,至于

+0

感谢您的答复可悲的是,当我运行此我只是得到一个空的小部件。当前路径是“D:\ Test”,在那里有两个文件夹folder0和folder1与相应的文件匹配你的过滤器,但仍然没有。 – supertom44 2011-03-19 18:56:05

+0

这个例子在我的ubuntu上运行得很好,过滤模型中的逻辑非常基本,只是为了给你一个关于如何处理你的任务的想法。跟踪filterAcceptsRow方法并将其调整为任何过滤规则。 – 2011-03-19 19:39:54

+0

我设法让它工作我意识到这是由于我没有使用完整的文件路径,一旦我重新读取文件,并意识到它使用开始,我意识到它需要是完整的文件路径。谢谢 – supertom44 2011-03-19 20:28:09