как создать представление папки в 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) 

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

  • Заполнение QListWidget пользовательскими виджетами
  • Окно PyQt4 не появляется во время запуска программы, но появляется на ipython
  • Пример правильного способа использования QThread в PyQt?
  • Пользовательский QStandardItemModel с пользовательским методом данных
  • PyQt4 to PyQt5 -> mainFrame () устарел, требуется исправление для загрузки веб-страниц
  • Как проверить, нажат ли ключ-модификатор (shift, ctrl, alt)?
  • PyQt не распознает клавиши со стрелками
  • выпадающее событие / обратный вызов в комбинированном поле в pyqt4
  • PyInstaller - нет модуля с именем
  • Вызов функции ввода после __init__ с декоратором
  • Как добавить изображение в QWidget в PyQt4
  • Python - лучший язык программирования в мире.