python - 在 QTreeView 中用不同的图标显示文件夹/文件

标签 python pyqt pyside qtreeview

我用 Python 编写了一个函数,该函数遍历指定目录并递归地获取其所有文件和子文件夹并过滤它以仅列出某些文件格式。我如何在 TreeView 中显示它,文件夹和文件的图标不同?

递归目录函数:

def test(self):
    formats = ['.jpg', '.jpeg', '.txt']

    for path, subdirs, files in os.walk(r'C:/Users/jmartini/Projects/Photogrammetry'):
        for file in files:
            filename, extension = os.path.splitext(file)

            if (extension.lower() in formats):
                f = os.path.join(path, file)
                print f

概念

enter image description here

整个应用程序代码:

import sys
import os
from PySide import QtGui, QtCore


class Example(QtGui.QWidget):

    def __init__(self):
        super(Example, self).__init__()
        self.initUI()

    def initUI(self):      
        # formatting
        self.resize(550, 400)
        self.setWindowTitle("Toychest")

        # widgets
        self.toollist = QtGui.QTreeView()

        # Tabs

        # signals

        # main layout
        mainLayout = QtGui.QGridLayout()
        mainLayout.setContentsMargins(0,0,0,0)
        mainLayout.addWidget(self.toollist)
        self.setLayout(mainLayout)

        # self.test()

# Functions
# ------------------------------------------------------------------------------
    def test(self):
        formats = ['.jpg', '.jpeg', '.txt']

        for path, subdirs, files in os.walk(r'C:/Users/jmartini/Projects/Photogrammetry'):
            for file in files:
                filename, extension = os.path.splitext(file)

                if (extension.lower() in formats):
                    f = os.path.join(path, file)
                    print f


# Main
# ------------------------------------------------------------------------------
if __name__ == '__main__':
    app = QtGui.QApplication(sys.argv)
    ex = Example()
    ex.show()
    sys.exit(app.exec_())

最佳答案

当向树中添加一个新项目时,它首先必须在树中找到它应该作为父项的项目。例如

path = '/path/to/file.jpg'

要在树中创建此项,我首先需要找到path 的顶级项。然后,我需要为 to 找到该项目的子项。然后,我可以添加 file.jpg 项。

def find_or_create_item(self, path, parent=None):
    if parent is None:
        parent = self.tree.invisibleRootItem()
    names = path.lstrip('/').split('/')
    name = names[0]
    for i in range(parent.childCount()):
        child = parent.child(i)
        if child.text(0) == name:
            item = child
            break
    else:
        item = QTreeWidgetItem(name)
        parent.addChild(item)

    if names[1:]:
        return self.find_or_create_item('/'.join(names[1:], item)
    else:
        return item

关于python - 在 QTreeView 中用不同的图标显示文件夹/文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37791718/

相关文章:

python - MathJax 闪烁和状态栏在 PyQt5 中显示

qt - 如何删除QLabel和QLineEdit之间的空格

python - libvlc "VLC is unable to open the MRL ' C :\Users\Public\Videos\Sample Videos\Wildlife. mwv'"

python - 如何获取异常的完整路径名以便我可以添加异常处理程序

python - 在其他功能中使用相机时从网络摄像头拍摄快照

python - Django 测试中的类模拟

Python - 将 Tkinter 图形添加到 PyQt 小部件

python - PySide + QGraphicsScene 仅显示为黑色

python - 如何对两个字段进行分组并将索引设置为两个字段之一。 Pandas ,Python-3

python - 在 QGraphicsScene 选择更改后为所选项目切换 QPen