Scegliere un file in Python con una semplice finestra di dialogo


127

Vorrei ottenere il percorso del file come input nella mia applicazione console Python.

Attualmente posso solo chiedere il percorso completo come input nella console.

C'è un modo per attivare una semplice interfaccia utente in cui gli utenti possono selezionare il file invece di digitare il percorso completo?

Risposte:


212

Che ne dici di usare 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)

Fatto!


Ho TypeError: l'oggetto 'module' non è richiamabile su Tk () .draw () - qualche idea?
user391339

1
Ho dovuto fare root = Tk.Tk () quindi root.withdraw (). Tuttavia, la finestra di dialogo Apri file non si chiude.
user391339

20
Utilizzando Python 3.x e credo che "Tkinter" in realtà dovrebbe essere tutto minuscolo, "tkinter".
WestAce

1
@WestAce sì, è stato cambiato da "Tkinter" a "tkinter" per Python3
Ben

1
Esiste un modo per consentire solo determinati tipi di file? per es. Voglio che l'utente selezioni solo i file di immagine
Shantanu Shinde

85

La versione Python 3.x della risposta di Etaoin per completezza:

from tkinter.filedialog import askopenfilename
filename = askopenfilename()

7
Per il parallelismo totale, probabilmente dovrebbe anche avere import tkinter+ tkinter.Tk().withdraw().
imallett

4
questo non funziona per me (su Mac, Python 3.6.6) La finestra della GUI si apre ma non puoi chiuderla e ottieni il beachball of death
Ben Vincent

1
anch'io. la finestra di dialogo del file non si chiude
Cabara

1
questo codice è identico alla risposta accettata ma incompleto.
eric

Su Mac 10.14.6, questo ha aperto il File finder, quindi ha semplicemente bloccato l'intero sistema :(
gaya

29

Con EasyGui (documentazione generata da pydoc ed epydoc per la versione 0.96):

import easygui
print(easygui.fileopenbox())

Installare:

pip install easygui

demo:

import easygui
easygui.egdemo()

4
Questa è la migliore soluzione finora. Il motivo principale è che easygui è un pacchetto pip e facile da installare
Yonatan Naor

2
Su Mac OSX 10.14.5, python 3.6.7, easygui 0.98.1 ottengo un terribile crash quando provo questo. Non consigliato.
Christopher Barber

Perché ricevo un invalid syntaxerrore per print easygui.diropenbox()?
Bricktop


1
@ChristopherBarber stesso con 10.14.6. Python continua a smettere.
gaya

11

In Python 2 usa il tkFileDialogmodulo.

import tkFileDialog

tkFileDialog.askopenfilename()

In Python 3 usa il tkinter.filedialogmodulo.

import tkinter.filedialog

tkinter.filedialog.askopenfilename()

Non fa parte dell'installazione standard in Python 3.
miguelmorin

3

Un'altra opzione da considerare è Zenity: http://freecode.com/projects/zenity .

Ho avuto una situazione in cui stavo sviluppando un'applicazione server Python (nessun componente GUI) e quindi non volevo introdurre una dipendenza da alcun toolkit GUI Python, ma volevo che alcuni dei miei script di debug fossero parametrizzati da file di input e volevo richiede visivamente all'utente un file se non ne ha specificato uno sulla riga di comando. Zenity era perfetto. Per ottenere ciò, invoca "zenity --file-selection" utilizzando il modulo subprocess e acquisisci lo stdout. Ovviamente questa soluzione non è specifica di Python.

Zenity supporta più piattaforme ed è capitato che fosse già installato sui nostri server di sviluppo, quindi ha facilitato il nostro debug / sviluppo senza introdurre dipendenze indesiderate.


0

Ho ottenuto risultati molto migliori con wxPython rispetto a tkinter, come suggerito in questa risposta a una successiva domanda duplicata:

https://stackoverflow.com/a/9319832

La versione wxPython ha prodotto la finestra di dialogo del file che sembrava la stessa della finestra di dialogo del file aperto da quasi tutte le altre applicazioni sulla mia installazione di OpenSUSE Tumbleweed con il desktop xfce, mentre tkinter ha prodotto qualcosa di angusto e difficile da leggere con un'interfaccia a scorrimento laterale non familiare.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.