Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 指定目录和子目录中的嵌套QTreeview_Python_Pyside_Qtreeview - Fatal编程技术网

Python 指定目录和子目录中的嵌套QTreeview

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

我正在从指定的文件夹目录填充QTreeview。但是,我不完全清楚如何正确调整代码,使Treeview更好地反映文件夹的嵌套。在这种情况下,我只想显示其中包含OBJ文件的文件夹

我希望它看起来像这样


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