как создать представление папки в pyqt внутри главного окна

Я пытаюсь реализовать средство просмотра папок для просмотра структуры определенного пути. и это представление папки должно выглядеть как виджет дерева в PyQT, я знаю, что диалог файла может помочь, но мне нужно его внутри основного окна.
Я попытался реализовать это с помощью QTreeWidget, и я использовал рекурсированную функцию для циклического перемещения внутри папок, но это слишком медленно. так как он нуждается в рекурсии вокруг огромного количества папок. это правильный способ сделать это? или есть готовое решение qt для этой проблемы.
Проверьте рисунок ниже.

введите описание изображения здесь

2 Solutions collect form web for “как создать представление папки в pyqt внутри главного окна”

Используйте модели и представления.

"""An example of how to use models and views in PyQt4. Model/view documentation can be found at http://doc.qt.nokia.com/latest/model-view-programming.html. """ import sys from PyQt4.QtGui import (QApplication, QColumnView, QFileSystemModel, QSplitter, QTreeView) from PyQt4.QtCore import QDir, Qt if __name__ == '__main__': app = QApplication(sys.argv) # Splitter to show 2 views in same widget easily. splitter = QSplitter() # The model. model = QFileSystemModel() # You can setRootPath to any path. model.setRootPath(QDir.rootPath()) # List of views. views = [] for ViewType in (QColumnView, QTreeView): # Create the view in the splitter. view = ViewType(splitter) # Set the model of the view. view.setModel(model) # Set the root index of the view as the user's home directory. view.setRootIndex(model.index(QDir.homePath())) # Show the splitter. splitter.show() # Maximize the splitter. splitter.setWindowState(Qt.WindowMaximized) # Start the main loop. sys.exit(app.exec_()) 

для PyQt5 я сделал эту функцию:

 def load_project_structure(startpath, tree): """ Load Project structure tree :param startpath: :param tree: :return: """ import os from PyQt5.QtWidgets import QTreeWidgetItem from PyQt5.QtGui import QIcon for element in os.listdir(startpath): path_info = startpath + "/" + element parent_itm = QTreeWidgetItem(tree, [os.path.basename(element)]) if os.path.isdir(path_info): load_project_structure(path_info, parent_itm) parent_itm.setIcon(0, QIcon('assets/folder.ico')) else: parent_itm.setIcon(0, QIcon('assets/file.ico')) 

то я называю это следующим образом:

  load_project_structure("/your/path/here",projectTreeWidget) 

и у меня есть этот результат: введите описание изображения здесь

  • PyQt QTcpServer: как вернуть данные нескольким клиентам?
  • Получение виджетов макета в PyQT
  • Как ссылаться на объект-создатель в Python?
  • Печать текста через принтер с помощью PyQt4
  • Как установить элемент по умолчанию QComboBox
  • Python QT QNetworkRequest завершает работу с "(процесс: 3265): GLib-ERROR **: Создание каналов для GWakeup: Слишком много открытых файлов"
  • Как ограничить ввод пользователя в QLineEdit в pyqt
  • Невозможно добавить собственные заголовки запросов в PyQT4
  • Python - лучший язык программирования в мире.