Python 指定目录和子目录中的嵌套QTreeview
我正在从指定的文件夹目录填充QTreeview。但是,我不完全清楚如何正确调整代码,使Treeview更好地反映文件夹的嵌套。在这种情况下,我只想显示其中包含OBJ文件的文件夹 我希望它看起来像这样Python 指定目录和子目录中的嵌套QTreeview,python,pyside,qtreeview,Python,Pyside,Qtreeview,我正在从指定的文件夹目录填充QTreeview。但是,我不完全清楚如何正确调整代码,使Treeview更好地反映文件夹的嵌套。在这种情况下,我只想显示其中包含OBJ文件的文件夹 我希望它看起来像这样 使用QFileInfo和QDir: def populate_files(self): model = self.ui_files.model() model.clear() exts = ["*.obj"] root = 'C:/Users/jmartini/D
使用
QFileInfo
和QDir
:
def populate_files(self):
model = self.ui_files.model()
model.clear()
exts = ["*.obj"]
root = 'C:/Users/jmartini/Desktop/Trash/models'
def addItems(parent, path):
finfo = QtCore.QFileInfo(path)
if finfo.isFile():
if "*."+finfo.suffix() in exts:
it = QtGui.QStandardItem(finfo.fileName())
it.setData(finfo.absoluteFilePath(), QtCore.Qt.UserRole)
parent.appendRow(it)
elif finfo.isDir():
iterator = QtCore.QDirIterator(finfo.absoluteFilePath(), exts, QtCore.QDir.Files, QtCore.QDirIterator.Subdirectories)
if iterator.hasNext():
it = QtGui.QStandardItem(finfo.fileName().upper())
it.setData(finfo.absoluteFilePath(), QtCore.Qt.UserRole)
parent.appendRow(it)
for subfiles in QtCore.QDir(finfo.absoluteFilePath()).entryInfoList([], QtCore.QDir.AllEntries|QtCore.QDir.NoDotAndDotDot):
addItems(it, subfiles.absoluteFilePath())
for finfo in QtCore.QDir(root).entryInfoList([], QtCore.QDir.AllEntries|QtCore.QDir.NoDotAndDotDot):
addItems(model, finfo.absoluteFilePath())
self.ui_files.expandAll()
我的解决方案有效吗?
def populate_files(self):
model = self.ui_files.model()
model.clear()
exts = ["*.obj"]
root = 'C:/Users/jmartini/Desktop/Trash/models'
def addItems(parent, path):
finfo = QtCore.QFileInfo(path)
if finfo.isFile():
if "*."+finfo.suffix() in exts:
it = QtGui.QStandardItem(finfo.fileName())
it.setData(finfo.absoluteFilePath(), QtCore.Qt.UserRole)
parent.appendRow(it)
elif finfo.isDir():
iterator = QtCore.QDirIterator(finfo.absoluteFilePath(), exts, QtCore.QDir.Files, QtCore.QDirIterator.Subdirectories)
if iterator.hasNext():
it = QtGui.QStandardItem(finfo.fileName().upper())
it.setData(finfo.absoluteFilePath(), QtCore.Qt.UserRole)
parent.appendRow(it)
for subfiles in QtCore.QDir(finfo.absoluteFilePath()).entryInfoList([], QtCore.QDir.AllEntries|QtCore.QDir.NoDotAndDotDot):
addItems(it, subfiles.absoluteFilePath())
for finfo in QtCore.QDir(root).entryInfoList([], QtCore.QDir.AllEntries|QtCore.QDir.NoDotAndDotDot):
addItems(model, finfo.absoluteFilePath())
self.ui_files.expandAll()