¿Explorador de archivos simple / selector de archivos en el progtwig Python con Qt-GUI?

Actualmente estoy intentando implementar algún tipo de explorador de archivos / “explorador” en un progtwig … Estoy usando Python y PySide en conexión con el kit de herramientas Qt-window-window. Más o menos este video de youtube muestra el comportamiento que quiero tener al final. Sin embargo, este tutorial usaba C ++ como lenguaje de progtwigción y aún no he podido razonar el código de Python correcto en el ejemplo de C ++.

Básicamente, mi problema es obtener la columna de la derecha (vista de archivo) que muestra el contenido de la carpeta en la que se hizo clic en la columna de la izquierda (vista de la carpeta de estilo de árbol).

#!/usr/bin/env python # -*- coding: utf-8 -*- import sys from PySide import QtGui, QtCore class MainWindow(QtGui.QMainWindow): def __init__(self): QtGui.QMainWindow.__init__(self) self.resize(600, 600) self.fileBrowserWidget = QtGui.QWidget(self) self.setCentralWidget(self.fileBrowserWidget) self.dirmodel = QtGui.QFileSystemModel() # Don't show files, just folders self.dirmodel.setFilter(QtCore.QDir.NoDotAndDotDot | QtCore.QDir.AllDirs) self.folder_view = QtGui.QTreeView(parent=self); self.folder_view.setModel(self.dirmodel) self.folder_view.clicked[QtCore.QModelIndex].connect(self.clicked) # Don't show columns for size, file type, and last modified self.folder_view.setHeaderHidden(True) self.folder_view.hideColumn(1) self.folder_view.hideColumn(2) self.folder_view.hideColumn(3) self.selectionModel = self.folder_view.selectionModel() self.filemodel = QtGui.QFileSystemModel() # Don't show folders, just files self.filemodel.setFilter(QtCore.QDir.NoDotAndDotDot | QtCore.QDir.Files) self.file_view = QtGui.QListView(parent=self); self.file_view.setModel(self.filemodel) splitter_filebrowser = QtGui.QSplitter() splitter_filebrowser.addWidget(self.folder_view) splitter_filebrowser.addWidget(self.file_view) splitter_filebrowser.setStretchFactor(0,2) splitter_filebrowser.setStretchFactor(1,4) hbox = QtGui.QHBoxLayout(self.fileBrowserWidget) hbox.addWidget(splitter_filebrowser) def set_path(self): self.dirmodel.setRootPath("") def clicked(self, index): # get selected path of folder_view index = self.selectionModel.currentIndex() dir_path = self.dirmodel.filePath(index) ############################################### # Here's my problem: How do I set the dir_path # for the file_view widget / the filemodel? ############################################### self.filemodel.setRootPath(dir_path) app = QtGui.QApplication(sys.argv) main = MainWindow() main.show() main.set_path() sys.exit(app.exec_()) 

Como puede ver en mi código, ya intenté usar la setRootPath setRootPath … sin embargo, no parece ser la correcta. Así que me pregunto, ¿qué tengo que hacer para que esto funcione?

Debe establecer el índice raíz en el adecuado en el modelo de archivo. Puede hacer esto agregando la siguiente línea al final de la función pulsada ():

 self.file_view.setRootIndex(self.filemodel.index(dir_path)) 

Fui capaz de resolverlo a partir de mi experiencia usando Qt en C ++. La documentación de Qt en C ++ es realmente buena si puedes descubrir cómo se traduce a Python. Pude resolver esto mirando la documentación de QFileSystemModel .

Debe establecer el índice raíz de la vista de lista de archivos:

 def clicked(self, index): # the signal passes the index of the clicked item dir_path = self.filemodel.filePath(index) root_index = self.filemodel.setRootPath(dir_path) self.file_view.setRootIndex(root_index)