Auswählen einer Datei in Python mit einfachem Dialog

127

Ich möchte den Dateipfad als Eingabe in meine Python-Konsolenanwendung erhalten.

Derzeit 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, in der Benutzer Dateien auswählen können, anstatt den vollständigen Pfad einzugeben?

Mustafa Zengin
quelle

Antworten:

211

Wie wäre es mit tkinter?

from Tkinter import Tk
from tkinter.filedialog 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)

Getan!

Etaoin
quelle
Ich habe TypeError: 'Modul'-Objekt kann auf Tk () nicht aufgerufen werden. Zurückziehen () - irgendwelche Ideen?
Benutzer391339
1
Ich musste root = Tk.Tk () und dann root.withdraw () machen. Jetzt wird das Dialogfeld zum Öffnen von Dateien jedoch nicht geschlossen.
Benutzer391339
20
Wenn Sie Python 3.x verwenden und ich glaube, dass "Tkinter" eigentlich nur Kleinbuchstaben sein soll, "tkinter".
WestAce
1
@ WestAce ja, es wurde von "Tkinter" zu "tkinter" für Python3 geändert
Ben
1
Gibt es eine Möglichkeit, nur bestimmte Dateitypen zuzulassen? für zB. Ich möchte, dass der Benutzer nur Bilddateien auswählt
Shantanu Shinde
85

Python 3.x-Version von Etaoins Antwort der Vollständigkeit halber:

from tkinter.filedialog import askopenfilename
filename = askopenfilename()
Stefano Palazzo
quelle
7
Für totale Parallelität sollte wohl auch import tkinter+ haben tkinter.Tk().withdraw().
Imallett
3
Dies funktioniert nicht für mich (auf Mac, Python 3.6.6) Das GUI-Fenster wird geöffnet, aber Sie können es nicht schließen und Sie erhalten Beachball des Todes
Ben Vincent
1
hier gilt das gleiche. Der
Dateidialog
1
Dieser Code entspricht genau der akzeptierten Antwort, ist jedoch unvollständig.
Eric
Auf Mac 10.14.6 öffnete dies den File Finder und stürzte dann das gesamte System ab :(
gaya
29

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

import easygui
print(easygui.fileopenbox())

Installieren:

pip install easygui

Demo:

import easygui
easygui.egdemo()
jfs
quelle
4
Dies ist die bisher beste Lösung. Der Hauptgrund ist, dass easygui ein Pip-Paket ist und einfach zu installieren ist
Yonatan Naor
2
Unter Mac OSX 10.14.5, Python 3.6.7, easygui 0.98.1 bekomme ich einen schrecklichen Absturz, wenn ich das versuche. Nicht empfohlen.
Christopher Barber
Warum bekomme ich invalid syntaxFehler für print easygui.diropenbox()?
Bricktop
1
@ChristopherBarber gleich mit 10.14.6. Python hört einfach weiter auf.
Gaya
11

Verwenden Sie in Python 2 das tkFileDialogModul.

import tkFileDialog

tkFileDialog.askopenfilename()

Verwenden Sie in Python 3 das tkinter.filedialogModul.

import tkinter.filedialog

tkinter.filedialog.askopenfilename()
Gary Kerr
quelle
Es ist nicht Teil der Standardinstallation in Python 3.
Miguelmorin
3

Eine weitere in Betracht zu ziehende Option ist Zenity: http://freecode.com/projects/zenity .

Ich hatte eine Situation, in der ich eine Python-Serveranwendung (keine GUI-Komponente) entwickelte und daher keine Abhängigkeit von Python-GUI-Toolkits einführen wollte, aber ich wollte, dass einige meiner Debug-Skripte durch Eingabedateien parametrisiert werden und wollten Fordern Sie den Benutzer visuell zur Eingabe einer Datei auf, wenn er keine in der Befehlszeile angegeben hat. Zenity passte perfekt. Rufen Sie dazu mit dem Unterprozessmodul "zenity --file-selection" auf und erfassen Sie das stdout. Natürlich ist diese Lösung nicht Python-spezifisch.

Zenity unterstützt mehrere Plattformen und wurde zufällig bereits auf unseren Entwicklungsservern installiert, sodass das Debuggen / Entwickeln erleichtert wurde, ohne dass eine unerwünschte Abhängigkeit eingeführt wurde.

kylejmcintyre
quelle
0

Ich habe mit wxPython viel bessere Ergebnisse erzielt als mit tkinter, wie in dieser Antwort auf eine spätere doppelte Frage vorgeschlagen:

https://stackoverflow.com/a/9319832

Die wxPython-Version erzeugte den Dateidialog, der genauso aussah wie der Dialog zum Öffnen von Dateien aus nahezu jeder anderen Anwendung in meiner OpenSUSE Tumbleweed-Installation mit dem xfce-Desktop, während tkinter mit einer unbekannten Side-Scrolling-Oberfläche etwas beengtes und schwer lesbares erzeugte.

Glen Whitney
quelle