2010-08-26 4 views
75

Ich möchte Dateipfad als Eingabe in meiner Python-Konsolenanwendung abrufen.Auswählen einer Datei in Python mit einfachem Dialog

Zur Zeit kann ich nur nach dem vollständigen Pfad als Eingabe in der Konsole fragen.

Gibt es eine Möglichkeit, eine einfache Benutzeroberfläche auszulösen, wo Benutzer Datei auswählen können, anstatt den vollständigen Pfad einzugeben?

+1

Diese Fragen werden zu Antworten auffordern, die eine einfache plattformübergreifende Python-Bibliothek empfehlen. Keine gute Frage. Es wird viele verschiedene Antworten geben und so weiter. – leonneo

+0

Ich sehe, warum diese Frage geschlossen wurde, aber für mich war es am schnellsten, ein klares und einfaches Beispiel zu geben, wie man einen offenen Dateidialog mit Tkinter bekommt (auch zuerst bei Google). Vielleicht wäre es wert, es neu zu formulieren, damit es wieder geöffnet werden kann? – luator

+1

@luator, bearbeitet die Frage Regeln aus der Hilfe zu folgen. –

Antwort

138

Wie wäre es mit Tkinter?

from Tkinter import Tk 
from tkFileDialog import askopenfilename 

Tk().withdraw() # we don't want a full GUI, so keep the root window from appearing 
filename = askopenfilename() # show an "Open" dialog box and return the path to the selected file 
print(filename) 

Fertig!

+2

vielen Dank –

+0

Ich habe TypeError: "Modul" -Objekt ist nicht auf Tk() abrufbar.() - irgendwelche Ideen? – user391339

+1

Ich musste root = Tk.Tk() dann root.withdraw() tun. Jetzt wird das geöffnete Dateidialogfenster jedoch nicht geschlossen. – user391339

4

Verwenden Sie das Modul tkFileDialog, das Teil der Standardinstallation ist.

import tkFileDialog 

print tkFileDialog.askopenfilename() 
10

Mit EasyGui (Dokumentation, die von pydoc und epydoc für Version 0.96):

import easygui 
print easygui.fileopenbox() 

zu installieren:

pip install http://easygui.sourceforge.net/download/version0.96/easygui_v0.96.zip 

Demo:

import easygui 
easygui.egdemo() 
+0

Dies ist die beste Lösung bisher. Der Hauptgrund ist, dass easygui ein Pip-Paket ist und einfach zu installieren ist. –

52

Python 3.x-Version Etaoins Antwort auf Vollständigkeit:

from tkinter.filedialog import askopenfilename 
filename = askopenfilename() 
+5

Für eine vollständige Parallelität, sollte wahrscheinlich auch 'import tkinter' +' tkinter.Tk(). Remove() 'haben. – imallett

2

Eine weitere zu berücksichtigende Option ist Zenity: http://freecode.com/projects/zenity.

Ich hatte eine Situation, in der ich eine Python-Server-Anwendung (keine GUI-Komponente) entwickelte und daher keine Abhängigkeit von irgendwelchen Python-GUI-Toolkits einführen wollte, aber ich wollte, dass einige meiner Debug-Skripte durch Eingabe parametrisiert wurden Dateien und wollten den Benutzer visuell nach einer Datei fragen, wenn sie in der Befehlszeile keine angeben. Zenity war perfekt. Um dies zu erreichen, rufen Sie "zenity --file-selection" mit dem Subprozess-Modul auf und erfassen Sie das stdout. Natürlich ist diese Lösung nicht Python-spezifisch.

Zenity unterstützt mehrere Plattformen und wurde bereits auf unseren Dev-Servern installiert, so dass es unser Debugging/Entwicklung erleichtert, ohne eine unerwünschte Abhängigkeit einzuführen.

Verwandte Themen