2016-08-03 29 views
2

Gibt es eine Möglichkeit, mit QFileDialog direkt zu einem Ordner zu navigieren?PyQt - QFileDialog - direkt zu einem Ordner navigieren?

Bedeutung, statt Doppelklick auf jeden Ordner, während in den Zielordner navigieren, geben Sie einfach den Pfad irgendwo oder einen Hotkey wie die verwenden (Shift + Befehl + G) im Finder unter Mac OS X

Vielen Dank!

EDIT: (mein Code)

filter = "Wav File (*.wav)" 
    self._audio_file = QtGui.QFileDialog.getOpenFileName(self, "Audio File", 
                 "/myfolder/folder", filter) 
    self._audio_file = str(self._audio_file) 

Antwort

3

Wenn Sie die statischen QFileDialog Funktionen verwenden, werden Sie eine bekommen native Datei-Dialog, und so wirst du li sein mit der Funktionalität von der Plattform zur Verfügung gestellt. Sie können in der Dokumentation zu Ihrer Plattform nachsehen, ob die gewünschte Funktionalität verfügbar ist.

Wenn es nicht verfügbar ist, müssen Sie mit Qt's integrierten Datei-Dialog zufrieden sein, und fügen Sie Ihre eigenen Funktionen hinzu. Für Ihren speziellen Anwendungsfall sollte dies einfach sein, da der integrierte Dialog bereits das zu haben scheint, was Sie wollen. Es hat eine side-bar, die eine Liste von "Orten" zeigt, zu denen der Benutzer direkt navigieren kann. Sie können Ihre eigenen Orte wie diese gesetzt:

dialog = QtGui.QFileDialog(self, 'Audio Files', directory, filter) 
dialog.setFileMode(QtGui.QFileDialog.DirectoryOnly) 
dialog.setSidebarUrls([QtCore.QUrl.fromLocalFile(place)]) 
if dialog.exec_() == QtGui.QDialog.Accepted: 
    self._audio_file = dialog.selectedFiles()[0] 
+0

Großartig, die 'Sidebar'-Sache hilft definitiv. Vielen Dank! – YaronGh

0

Nachfolgend finden Sie einen einfachen Test finden, die zu einem bestimmten Pfad direkt den Dialog öffnet sich, in diesem Fall wird das aktuelle Arbeitsverzeichnis sein. Wenn Sie direkt einen anderen Weg öffnen möchten, können Sie nur die verwenden Python Verzeichnisfunktionen in os.path Modul enthalten:

import sys 
import os 
from PyQt4 import QtGui 


def test(): 
     filename = QtGui.QFileDialog.getOpenFileName(
      None, 'Test Dialog', os.getcwd(), 'All Files(*.*)') 

def main(): 
    app = QtGui.QApplication(sys.argv) 

    test() 

    sys.exit(app.exec_()) 

if __name__ == "__main__": 
    main() 
+0

Danke, aber das ist nicht wirklich das, was ich suchte .. ich meinte, dass ich der Benutzer in ein bestimmtes Verzeichnis navigieren lassen wollen (ohne einen Doppelklick auf den ganzen Weg zu es) nachdem der Dateidialog bereits geöffnet wurde. – YaronGh

+0

Nicht sicher, ob ich richtig verstehe, enthält getOpenFileName bereits eine Navigationsleiste, wo Sie Ihren Pfad direkt eingeben können, ohne die Maus überhaupt zu verwenden, ist das was Sie wollen? – BPL

+0

Ja, aber wenn ich QFileDialog zum Öffnen von Verzeichnissen und dann zum Eingeben eines Verzeichnispfads einstelle, wird dieser nur ausgewählt und zurückgegeben und navigiert nicht dorthin und bleibt dort "stehen". – YaronGh

0

In PyQt 4, Sie sind in der Lage, nur ein QFileDialog hinzufügen, um ein Fenster zu konstruieren, die einen Pfad Textfeld hat eingebettet in das Dialogfeld. Sie können Ihren Pfad hier einfügen.

QtGui.QFileDialog.getOpenFileName(self, 'Select file') # For file. 

Für ein Verzeichnis auswählen:

QtGui.QFileDialog.getExistingDirectory(self, 'Select directory') 

Jeder wird einen Pfad Textfeld:

enter image description here

+0

Aus irgendeinem Grund funktioniert das nicht für mich .. Verwendung: 'QtGui.QFileDialog.getOpenFileName (selbst," Datei laden ", Filter)'. Ich bekomme dieses Pfadtextfeld nicht. 'filter' ist eine solche Zeichenfolge, die ich erstellt habe, um einen bestimmten Dateityp auszuwählen. – YaronGh

+0

Und wie ich weiter unten erwähnt habe, wenn ich QFileDialog auf das Öffnen von Verzeichnissen einstelle und dann einen Verzeichnispfad in das Standardpfad-Textfeld eingib, wählt er nur diesen Ordner aus und kehrt zurück, er navigiert nicht dorthin und bleibt Dort. – YaronGh

+0

Vielleicht posten Sie einen Screenshot Ihres Dialogs und vollständigen Code? – ospahiu