我有一个 QFileDialog,我想过滤掉所有不在 ~/Documents 中的路径。
目前有
from PyQt5 import QtCore
import os
...
dialog = QtWidgets.QFileDialog(...)
dialog.setDirectory(os.path.expanduser("~/Documents"))
dialog.setProxyModel(MyFilter())
selectedPath = dialog.exec_()
...
class MyFilter(QtCore.QSortFilterProxyModel):
def filterAcceptsRow(self, p_int, QModelIndex):
sourceModel = self.sourceModel()
index = sourceModel.index(p_int, 0,QModelIndex)
path = sourceModel.filePath(index)
return self._inside_documents_or_is_ancestor(path)
def _inside_documents_or_is_ancestor(self, path):
docpath = os.path.expanduser("~/Documents")
if path.startswith(docpath) or docpath.startswith(path):
print True, path, docpath
return True
return False
似乎没有任何路径被过滤,因为我可以在 QFileDialog 中选择文件系统中的任何文件。
我不确定 filterAcceptsRow() 的详细信息,但似乎如果我拒绝一个目录,它的子目录将不会被考虑,这就是为什么我接受那些我想要的路径的祖先的路径。
我正在运行 pyqt 5.1 和 python 2.7.5