Simple explorateur de Fichiers / sélecteur de fichier en Python programme avec Qt GUI?
Je suis en train d'essayer de mettre en œuvre une sorte de navigateur de fichiers /"explorer" dans un programme... je suis en utilisant Python et PySide en relation avec le Qt-fenêtre-boîte à outils. Plus ou moins ce youtube-vidéo montre le comportement que je veux avoir à la fin. Cependant, ce tutoriel utilisé le C++ comme langage de programmation et je n'ai pas pu encore à la raison le droit du code python à partir de l'exemple C++.
En gros, mon problème est d'obtenir la colonne de droite (voir le fichier) affiche le contenu du dossier d'un clic dans la colonne de gauche (arbre de style de l'affichage du dossier).
#!/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_())
Comme vous pouvez le voir dans mon code, j'ai déjà essayé d'utiliser le setRootPath
-fonction... cependant, ça ne semble pas être la bonne. Alors je me demande, ce que j'ai à faire pour obtenir que cela fonctionne?
OriginalL'auteur mozzbozz | 2012-02-12
Vous devez vous connecter pour publier un commentaire.
Vous devez définir la racine de l'index de la approprié dans le fichier modèle. Vous pouvez le faire en ajoutant la ligne suivante à la fin de la clicked() fonction:
J'ai été en mesure de comprendre, à partir de mon expérience à l'aide de Qt en C++. La documentation de Qt en C++ est vraiment assez bon si vous pouvez comprendre comment il se traduit par Python. J'ai été en mesure de le comprendre en regardant le QFileSystemModel documentation.
OriginalL'auteur Justin Peel
Vous devez définir la racine de l'index de la liste de fichiers affichage:
OriginalL'auteur ekhumoro