シンプルなダイアログを使用してPythonでファイルを選択する


127

Pythonコンソールアプリケーションの入力としてファイルパスを取得したいのですが。

現在、コンソールでの入力として要求できるのはフルパスのみです。

ユーザーが完全なパスを入力する代わりにファイルを選択できる単純なユーザーインターフェイスをトリガーする方法はありますか?

回答:


212

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)

できた!


TypeError: 'module'オブジェクトはTk()。withdraw()で呼び出すことができません-何かアイデアはありますか?
user391339 2014

1
私はroot = Tk.Tk()を実行し、次にroot.withdraw()を実行する必要がありました。ただし、ファイルを開くダイアログウィンドウは閉じません。
user391339 2014

20
Python 3.xを使用していて、「Tkinter」は実際にはすべて小文字の「tkinter」であると考えられています。
WestAce

1
@WestAceはい、Python3の「Tkinter」から「tkinter」に変更されました
Ben

1
特定の種類のファイルのみを許可する方法はありますか?たとえば。ユーザーに画像ファイルのみを選択させたい
Shantanu Shinde '11

85

完全を期すためのEtaoinの回答のPython 3.xバージョン:

from tkinter.filedialog import askopenfilename
filename = askopenfilename()

7
完全な並列処理のためには、おそらくimport tkinter+ も必要tkinter.Tk().withdraw()です。
イマレット2017

4
これは私には機能しません(Mac、Python 3.6.6)。GUIウィンドウは開きますが、閉じることができず、死のビーチボールを獲得します
Ben Vincent

1
こっちも一緒。ファイルダイアログが閉じない
Cabara

1
このコードは、受け入れられた回答とまったく同じですが、不完全です。
エリック

Mac 10.14.6では、これによりファイルファインダーが開き、システム全体がクラッシュしました:(
gaya

29

EasyGui(ドキュメントが生成されることにより、pydocepydocバージョン0.96用):

import easygui
print(easygui.fileopenbox())

インストールするには:

pip install easygui

デモ:

import easygui
easygui.egdemo()

4
これはこれまでのところ最良の解決策です。主な理由は、easyguiがpipパッケージであり、簡単にインストールできることです
Yonatan Naor

2
Mac OSX 10.14.5、python 3.6.7、easygui 0.98.1で試してみると、恐ろしいクラッシュが発生します。推奨されません。
Christopher Barber

なぜinvalid syntaxエラーが出るのprint easygui.diropenbox()ですか?
ブリックトップ


1
@ChristopherBarberは10.14.6と同じです。Pythonは終了し続けます。
ガヤ

11

Python 2ではtkFileDialogモジュールを使用します。

import tkFileDialog

tkFileDialog.askopenfilename()

Python 3では、tkinter.filedialogモジュールを使用します。

import tkinter.filedialog

tkinter.filedialog.askopenfilename()

これは、Python 3の標準インストールの一部ではありません
miguelmorin

3

考慮すべきもう1つのオプションは、Zenity:http : //freecode.com/projects/zenityです。

Pythonサーバーアプリケーション(GUIコンポーネントなし)を開発していて、Python GUIツールキットへの依存関係を導入したくない状況でしたが、一部のデバッグスクリプトを入力ファイルでパラメーター化して、コマンドラインでファイルを指定しなかった場合は、ユーザーに視覚的にファイルを要求します。Zenityはぴったりでした。これを実現するには、サブプロセスモジュールを使用して「zenity --file-selection」を呼び出し、stdoutをキャプチャします。もちろん、このソリューションはPython固有ではありません。

Zenityは複数のプラットフォームをサポートし、偶然にも開発サーバーにインストールされているため、不要な依存関係を導入することなくデバッグ/開発を容易にしました。


0

後で重複する質問に対するこの回答で示唆されているように、wkPythonを使用するとtkinterよりもはるかに優れた結果が得られました。

https://stackoverflow.com/a/9319832

wxPythonバージョンは、xfceデスクトップを使用した私のOpenSUSE Tumbleweedインストールの他のほぼすべてのアプリケーションからのファイルオープンダイアログと同じように見えるファイルダイアログを生成しましたが、tkinterは、なじみのない横スクロールインターフェースでは窮屈で読みにくいものを生成しました。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.