PyQt5 目录视图

PyQt 可以使用 QTreeView 显示目录结构。要使树视图显示为目录树,我们需要将其模型设置为 QFileSystemModel 实例。这是通过为树实例调用 setModel 方法来实现的。

我们可以在树对象上设置其他选项:启用排序(setSortingEnabled),动画和缩进。

PyQt5 目录视图

https://pythonspot-9329.kxcdn.com/wp-content/uploads/2017/03/qt5-directory-view.png

PyQt5 目录视图示例

下面的代码将目录视图(QTreeView 与 QFileSystemModel 结合)添加到网格窗口。需要为要查看的窗口小控件设置布局。

使用模型 setRootPath() 方法指定路径,其中参数是目录的完整路径。默认情况下是根目录。

import sys
from PyQt5.QtWidgets import QApplication, QFileSystemModel, QTreeView, QWidget, QVBoxLayout
from PyQt5.QtGui import QIcon

class App(QWidget):

    def __init__(self):
        super().__init__()
        self.title = 'PyQt5 file system view - tastones.com'
        self.left = 10
        self.top = 10
        self.width = 640
        self.height = 480
        self.initUI()

    def initUI(self):
        self.setWindowTitle(self.title)
        self.setGeometry(self.left, self.top, self.width, self.height)

        self.model = QFileSystemModel()
        self.model.setRootPath('')
        self.tree = QTreeView()
        self.tree.setModel(self.model)

        self.tree.setAnimated(False)
        self.tree.setIndentation(20)
        self.tree.setSortingEnabled(True)

        self.tree.setWindowTitle("Dir View")
        self.tree.resize(640, 480)

        windowLayout = QVBoxLayout()
        windowLayout.addWidget(self.tree)
        self.setLayout(windowLayout)

        self.show()

if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = App()
    sys.exit(app.exec_())