Memilih file dengan Python dengan Dialog sederhana

127

Saya ingin mendapatkan jalur file sebagai masukan dalam aplikasi konsol Python saya.

Saat ini saya hanya dapat meminta jalur lengkap sebagai masukan di konsol.

Apakah ada cara untuk memicu antarmuka pengguna yang sederhana di mana pengguna dapat memilih file daripada mengetikkan jalur lengkap?

Mustafa Zengin
sumber

Jawaban:

212

Bagaimana kalau menggunakan 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)

Selesai!

Etaoin
sumber
Saya mendapat TypeError: objek 'modul' tidak dapat dipanggil di Tk (). Withdrawal () - ada ide?
pengguna391339
1
Saya harus melakukan root = Tk.Tk () lalu root.withdraw (). Sekarang jendela dialog file yang terbuka tidak menutup.
pengguna391339
20
Menggunakan Python 3.x dan saya yakin "Tkinter" seharusnya menggunakan huruf kecil, "tkinter".
WestAce
1
@WestAce ya, itu diubah dari "Tkinter" menjadi "tkinter" untuk Python3
Ben
1
Apakah ada cara untuk mengizinkan hanya jenis file tertentu? untuk mis. Saya ingin pengguna memilih file gambar saja
Shantanu Shinde
85

Jawaban Etaoin versi Python 3.x untuk kelengkapannya:

from tkinter.filedialog import askopenfilename
filename = askopenfilename()
Stefano Palazzo
sumber
7
Untuk total paralelisme, mungkin juga harus memiliki import tkinter+ tkinter.Tk().withdraw().
imallett
4
ini tidak bekerja untuk saya (di Mac, Python 3.6.6) Jendela GUI terbuka tetapi Anda tidak dapat menutupnya dan Anda mendapatkan bola pantai kematian
Ben Vincent
1
sama disini. dialog file tidak akan menutup
Cabara
1
kode ini sama persis dengan jawaban yang diterima tetapi tidak lengkap.
eric
Pada Mac 10.14.6, ini membuka Pencari file kemudian merusak seluruh sistem :(
gaya
29

Dengan EasyGui (dokumentasi yang dihasilkan oleh pydoc dan epydoc untuk versi 0.96):

import easygui
print(easygui.fileopenbox())

Untuk memasang:

pip install easygui

Demo:

import easygui
easygui.egdemo()
jfs
sumber
4
Ini adalah solusi terbaik sejauh ini. Alasan utamanya adalah easygui adalah paket pip dan mudah dipasang
Yonatan Naor
2
Pada Mac OSX 10.14.5, python 3.6.7, easygui 0.98.1 Saya mengalami crash yang parah saat mencoba ini. Tidak direkomendasikan.
Christopher Barber
Mengapa saya mendapatkan invalid syntaxkesalahan print easygui.diropenbox()?
Bricktop
1
@ChristopherBarber sama dengan 10.14.6. Python terus berhenti.
gaya
11

Di Python 2 gunakan tkFileDialogmodul.

import tkFileDialog

tkFileDialog.askopenfilename()

Di Python 3 gunakan tkinter.filedialogmodul.

import tkinter.filedialog

tkinter.filedialog.askopenfilename()
Gary Kerr
sumber
Ini bukan bagian dari instalasi standar di Python 3.
miguelmorin
3

Pilihan lain untuk dipertimbangkan adalah Zenity: http://freecode.com/projects/zenity .

Saya mengalami situasi di mana saya mengembangkan aplikasi server Python (tidak ada komponen GUI) dan karenanya tidak ingin memperkenalkan ketergantungan pada toolkit GUI python apa pun, tetapi saya ingin beberapa skrip debug saya diparameterisasi oleh file input dan ingin secara visual meminta pengguna untuk sebuah file jika mereka tidak menentukannya pada baris perintah. Zenity sangat cocok. Untuk mencapai ini, aktifkan "zenity --file-selection" menggunakan modul subprocess dan ambil stdout. Tentu saja solusi ini tidak spesifik untuk Python.

Zenity mendukung banyak platform dan kebetulan sudah diinstal di server dev kami sehingga memudahkan debugging / pengembangan kami tanpa menimbulkan ketergantungan yang tidak diinginkan.

kylejmcintyre.dll
sumber
0

Saya memperoleh hasil yang jauh lebih baik dengan wxPython daripada tkinter, seperti yang disarankan dalam jawaban ini untuk pertanyaan duplikat nanti:

https://stackoverflow.com/a/9319832

Versi wxPython menghasilkan dialog file yang tampak sama dengan dialog file terbuka dari hampir semua aplikasi lain di instalasi Tumbleweed OpenSUSE saya dengan desktop xfce, sedangkan tkinter menghasilkan sesuatu yang sempit dan sulit dibaca dengan antarmuka pengguliran samping yang asing.

Glen Whitney
sumber