How to Display List of Files in A specified directory

前端 未结 1 1951
梦如初夏
梦如初夏 2021-01-06 16:20

How to display in a ListView manner files in a directory specified in the code in a PyQt window

example : Like in the right pane of this QFileSystemModelDialog app <

相关标签:
1条回答
  • 2021-01-06 17:14

    You have to create 2 QFileSystemModel, one will show the directories and the other the files. To change the view of the QListView you must use the clicked signal, using the QModelIndex you set the new rootIndex.

    import sys
    
    from PyQt5.QtWidgets import *
    from PyQt5.QtCore import *
    
    class Widget(QWidget):
        def __init__(self, *args, **kwargs):
            QWidget.__init__(self, *args, **kwargs)
            hlay = QHBoxLayout(self)
            self.treeview = QTreeView()
            self.listview = QListView()
            hlay.addWidget(self.treeview)
            hlay.addWidget(self.listview)
    
            path = QDir.rootPath()
    
            self.dirModel = QFileSystemModel()
            self.dirModel.setRootPath(QDir.rootPath())
            self.dirModel.setFilter(QDir.NoDotAndDotDot | QDir.AllDirs)
    
            self.fileModel = QFileSystemModel()
            self.fileModel.setFilter(QDir.NoDotAndDotDot |  QDir.Files)
    
            self.treeview.setModel(self.dirModel)
            self.listview.setModel(self.fileModel)
    
            self.treeview.setRootIndex(self.dirModel.index(path))
            self.listview.setRootIndex(self.fileModel.index(path))
    
            self.treeview.clicked.connect(self.on_clicked)
    
        def on_clicked(self, index):
            path = self.dirModel.fileInfo(index).absoluteFilePath()
            self.listview.setRootIndex(self.fileModel.setRootPath(path))
    
    
    if __name__ == '__main__':
        app = QApplication(sys.argv)
        w = Widget()
        w.show()
        sys.exit(app.exec_())
    
    0 讨论(0)
提交回复
热议问题