Simple File browser / file-chooser im Python-Programm mit Qt-GUI?
Ich bin derzeit versuchen zu implementieren eine Art von Datei-browser "explorer" in ein Programm... ich bin mit Python und PySide in Verbindung mit dem Qt-window-toolkit. Mehr oder weniger dieses youtube-video zeigt das Verhalten möchte ich am Ende haben. Jedoch, dieses tutorial verwendet C++ als Programmiersprache, und ich habe nicht in der Lage gewesen, noch auf Grund die richtige python-code aus der C++ - Beispiel.
Im Grunde, mein problem ist, der rechten Spalte (Datei anzeigen) zeigt den Inhalt des Ordners geklickt in der linken Spalte (Baum-Stil-Ordner-Ansicht).
#!/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_())
Wie Sie sehen können, in meinem code habe ich bereits versucht, den setRootPath
-Funktion... aber das scheint nicht der richtige zu sein. So Frage ich mich, was habe ich zu tun, weil Sie diese zu arbeiten?
InformationsquelleAutor mozzbozz | 2012-02-12
Du musst angemeldet sein, um einen Kommentar abzugeben.
Müssen Sie der root-index zu den entsprechenden in der Datei model. Sie können dies tun, indem Sie die folgende Zeile an das Ende der clicked () - Funktion:
War ich in der Lage, um es herauszufinden, aus meiner Erfahrung mit Qt in C++. Die Dokumentation von Qt in C++ ist eigentlich ganz gut, wenn Sie herausfinden können, wie es übersetzt in Python. Ich war in der Lage, um dies herauszufinden, suchen Sie in der QFileSystemModel Dokumentation.
InformationsquelleAutor Justin Peel
Müssen Sie der root-index der Dateien-Liste anzeigen:
InformationsquelleAutor ekhumoro