Python 如何按文件名过滤QFileSystemModel的文件列表?
我想制作一个可以显示特定文件夹的管理器。 假设我想筛选出没有扩展名的文件夹 尝试1:QFileSystemModel.setNameFilters() 尝试2:QtCore.QSortFilterProxyModel() 我试图修改正则表达式,但结果是一样的Python 如何按文件名过滤QFileSystemModel的文件列表?,python,pyqt5,pyside2,qfilesystemmodel,Python,Pyqt5,Pyside2,Qfilesystemmodel,我想制作一个可以显示特定文件夹的管理器。 假设我想筛选出没有扩展名的文件夹 尝试1:QFileSystemModel.setNameFilters() 尝试2:QtCore.QSortFilterProxyModel() 我试图修改正则表达式,但结果是一样的 只支持通配符,不支持正则表达式,因此失败 使用已实现筛选名称不具有扩展名的文件夹 导入操作系统 从PyQt5导入QtCore、QtGui、QtWidgets 如果名称=“\uuuuu main\uuuuuuuu”: 导入系统 app=qt
导入操作系统
从PyQt5导入QtCore、QtGui、QtWidgets
如果名称=“\uuuuu main\uuuuuuuu”:
导入系统
app=qtwidts.QApplication(sys.argv)
path=os.path.join(os.path.dirname(os.path.realpath(_文件__)),“56627022”)
dirModel=qtwidts.QFileSystemModel()
dirModel.setRootPath(QtCore.QDir.rootPath())
dirModel.setFilter(QtCore.QDir.NoDotAndDotDot | QtCore.QDir.Dirs)
view1=qtwidts.QTreeView()
视图1.setModel(dirModel)
view1.setRootIndex(dirModel.index(path))
proxyModel=QtCore.QSortFilterProxyModel()
proxyModel.setSourceModel(dirModel)
proxyModel.setFilterRegExp(r“^([^.]+)$”)
view2=qtwidts.QTreeView()
视图2.setModel(proxyModel)
view2.setRootIndex(proxyModel.mapFromSource(dirModel.index(path)))
w=qtwidts.QWidget()
hlay=qtwidts.QHBoxLayout(w)
hlay.addWidget(视图1)
hlay.addWidget(视图2)
w、 show()
sys.exit(app.exec_())
... ...
# get file data
path = 'f:/tmp2'
dirModel = QtWidgets.QFileSystemModel()
dirModel.setRootPath(path)
dirModel.setFilter(QtCore.QDir.NoDotAndDotDot | QtCore.QDir.Dirs)
# filter folders
dirModel.setNameFilters(['*.asset'])
# worked. but i want the opposite: that folders do not contain ".asset".
#dirModel.setNameFilters(['(^\.asset)$'])
# regular expression is not work. nothing shows up.
# show window
... ...
... ...
# get file data
path = 'f:/tmp2'
dirModel = QtWidgets.QFileSystemModel()
dirModel.setRootPath(path)
dirModel.setFilter(QtCore.QDir.NoDotAndDotDot | QtCore.QDir.Dirs)
# filter folders
proxyModel = QtCore.QSortFilterProxyModel()
proxyModel.setSourceModel(dirModel)
proxyModel.setFilterRegExp("(^\.asset)$") # if no this line, all folders are displayed; add this line, nothing shows up.
# show window
... ...