Python'da basit iletişim kutusuyla bir dosya seçme


128

Python konsol uygulamamda girdi olarak dosya yolunu almak istiyorum.

Şu anda konsolda bir girdi olarak yalnızca tam yol isteyebiliyorum.

Kullanıcıların tam yolu yazmak yerine dosya seçebilecekleri basit bir kullanıcı arayüzünü tetiklemenin bir yolu var mı?

Yanıtlar:


212

Tkinter kullanmaya ne dersiniz?

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)

Bitti!


TypeError aldım: 'modül' nesnesi Tk () üzerinde çağrılabilir değil. Withdraw () - herhangi bir fikir?
user391339

1
Root = Tk.Tk () sonra root.withdraw () yapmak zorunda kaldım. Ancak şimdi dosya açma iletişim penceresi kapanmıyor.
user391339

20
Python 3.x'i kullandığınızda "Tkinter" ın aslında tamamen küçük harfli "tkinter" olması gerektiğine inanıyorum.
WestAce

1
@WestAce evet, Python3 için "Tkinter" yerine "tkinter" olarak değiştirildi
Ben

1
Yalnızca belirli dosya türlerine izin vermenin bir yolu var mı? örneğin. Kullanıcının yalnızca resim dosyalarını seçmesini istiyorum
Shantanu Shinde

85

Etaoin'in eksiksizlik cevabının Python 3.x versiyonu:

from tkinter.filedialog import askopenfilename
filename = askopenfilename()

7
Toplam paralellik için, muhtemelen import tkinter+ olmalıdır tkinter.Tk().withdraw().
imallett

4
bu benim için çalışmıyor (Mac'te, Python 3.6.6) GUI penceresi açılıyor ama kapatamıyorsunuz ve bir plaj topu ölümü alıyorsunuz
Ben Vincent,

2
burada aynı. dosya iletişim kutusu kapanmıyor
Cabara

1
bu kod, kabul edilen cevapla tamamen aynıdır ancak eksiktir.
eric

Mac 10.14.6'da, bu Dosya bulucuyu açtı ve ardından tüm sistemi çöktü :(
gaya

30

İle EasyGui (belgeleri tarafından oluşturulan pydoc ve epydoc sürüm 0.96):

import easygui
print(easygui.fileopenbox())

Yüklemek:

pip install easygui

Demo:

import easygui
easygui.egdemo()

4
Şimdiye kadarki en iyi çözüm bu. Bunun ana nedeni, easygui'nin pip paketi olması ve kurulumunun kolay olması
Yonatan Naor

2
Mac OSX 10.14.5, python 3.6.7, easygui 0.98.1'de bunu denediğimde korkunç bir çökme yaşıyorum. Tavsiye edilmez.
Christopher Barber

Neden invalid syntaxhata alıyorum print easygui.diropenbox()?
Bricktop


1
@ChristopherBarber 10.14.6 ile aynı. Python çıkmaya devam ediyor.
gaya

11

Python 2'de tkFileDialogmodülü kullanın .

import tkFileDialog

tkFileDialog.askopenfilename()

Python 3'te tkinter.filedialogmodülü kullanın .

import tkinter.filedialog

tkinter.filedialog.askopenfilename()

Python 3'te standart kurulumun parçası değildir.
miguelmorin

3

Dikkate alınması gereken başka bir seçenek Zenity'dir: http://freecode.com/projects/zenity .

Bir Python sunucu uygulaması geliştirdiğim bir durum vardı (GUI bileşeni yok) ve bu nedenle herhangi bir python GUI araç setine bir bağımlılık getirmek istemedim, ancak bazı hata ayıklama komut dosyalarımın giriş dosyalarıyla parametrelendirilmesini istedim ve Komut satırında bir dosya belirtmediyse, kullanıcıdan görsel olarak bir dosya isteyin. Zenity mükemmel bir uyumdu. Bunu başarmak için, alt işlem modülünü kullanarak "zenity --file-selection" işlevini çağırın ve stdout'u yakalayın. Elbette bu çözüm Python'a özgü değildir.

Zenity birden fazla platformu destekler ve geliştirici sunucularımıza zaten yüklenmişti, bu nedenle istenmeyen bir bağımlılık oluşturmadan hata ayıklama / geliştirme sürecimizi kolaylaştırdı.


0

WxPython ile tkinter'den çok daha iyi sonuçlar elde ettim, bu yanıtta daha sonra tekrarlanan bir soruya önerildiği gibi:

https://stackoverflow.com/a/9319832

WxPython sürümü, xfce masaüstü ile OpenSUSE Tumbleweed kurulumumdaki hemen hemen tüm diğer uygulamalardan açık dosya iletişim kutusuyla aynı görünen dosya iletişim kutusunu oluştururken, tkinter alışılmadık bir yandan kaydırma arayüzüyle sıkışık ve okunması zor bir şey üretti.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.