2010-08-26 25 views
75

Me gustaría obtener la ruta del archivo como entrada en mi aplicación de consola de Python.Elegir un archivo en Python con simple Dialog

Actualmente solo puedo solicitar la ruta completa como entrada en la consola.

¿Hay alguna manera de activar una interfaz de usuario simple donde los usuarios pueden seleccionar el archivo en lugar de escribir la ruta completa?

+1

Esta pregunta invitará a las respuestas que recomiendan una biblioteca de python simple y multiplataforma. No es una buena pregunta. Habrá muchas respuestas diferentes, etc. – leonneo

+0

Veo por qué se cerró esta pregunta, pero para mí fue la más rápida de proporcionar un ejemplo claro y sencillo sobre cómo abrir un diálogo de archivo con Tkinter (también primer hit en google). Tal vez valdría la pena reformularlo para que pueda ser reabierto. – luator

+1

@luator, editó la pregunta para seguir las reglas del centro de ayuda. –

Respuesta

138

¿Qué le parece usar 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) 

¡Hecho!

+2

muchas gracias –

+0

Recibí TypeError: el objeto 'módulo' no se puede llamar en Tk(). Withdraw() - alguna idea? – user391339

+1

Tenía que hacer root = Tk.Tk() luego root.withdraw(). Ahora, la ventana de diálogo de archivo abierto no se cierra. – user391339

4

Utilice el módulo tkFileDialog que forma parte de la instalación estándar.

import tkFileDialog 

print tkFileDialog.askopenfilename() 
10

Con EasyGui (documentación generada por pydoc y epydoc para la versión 0.96):

import easygui 
print easygui.fileopenbox() 

Para instalar:

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

Demostración:

import easygui 
easygui.egdemo() 
+0

Esta es la mejor solución hasta ahora. La razón principal es que easygui es un paquete pip y fácil de instalar –

52

Python 3.x de versión La respuesta de Etaoin para completar:

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

Para el paralelismo total, probablemente también debería tener 'import tkinter' +' tkinter.Tk(). Withdraw() '. – imallett

2

Otra opción a tener en cuenta es Zenity: http://freecode.com/projects/zenity.

Tuve una situación en la que estaba desarrollando una aplicación de servidor Python (sin componente GUI) y por lo tanto no quería introducir una dependencia en ningún juego de herramientas GUI de python, pero quería que algunos de mis scripts de depuración se parametrasen por entrada archivos y quería solicitar visualmente al usuario un archivo si no especificaban uno en la línea de comando. Zenity fue un ajuste perfecto. Para lograr esto, invoque "zenity --file-selection" utilizando el módulo de subproceso y capture el stdout. Por supuesto, esta solución no es específica de Python.

Zenity es compatible con múltiples plataformas y ya está instalado en nuestros servidores de desarrollo, por lo que facilitó nuestra depuración/desarrollo sin introducir una dependencia no deseada.

Cuestiones relacionadas