Как отобразить список файлов в указанном каталоге - PullRequest
0 голосов
/ 11 мая 2018

Как отобразить в виде файла ListView файлы в каталоге, указанном в коде в окне PyQt

пример: как на правой панели этого приложения QFileSystemModelDialog

Like in the right pane of this QFileSystemModelDialog app

1 Ответ

0 голосов
/ 11 мая 2018

Вам нужно создать 2 QFileSystemModel, один покажет каталоги, а другой файлы.Чтобы изменить вид QListView, вы должны использовать сигнал щелчка, используя QModelIndex, вы устанавливаете новый 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_())
...