Pythonコンソールアプリケーションの入力としてファイルパスを取得したいと思います。
現在、コンソールの入力としてフルパスのみを要求できます。
ユーザーがフルパスを入力する代わりにファイルを選択できるシンプルなユーザーインターフェイスをトリガーする方法はありますか?
Pythonコンソールアプリケーションの入力としてファイルパスを取得したいと思います。
現在、コンソールの入力としてフルパスのみを要求できます。
ユーザーがフルパスを入力する代わりにファイルを選択できるシンプルなユーザーインターフェイスをトリガーする方法はありますか?
tkinterを使ってみませんか?
from Tkinter import Tk # from tkinter import Tk for Python 3.x
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)
終わり!
完全性のためのEtaoinの答えのPython3.xバージョン:
from tkinter.filedialog import askopenfilename
filename = askopenfilename()
EasyGuiで:
import easygui
print(easygui.fileopenbox())
インストールするには:
pip install easygui
デモ:
import easygui
easygui.egdemo()
Python 2では、tkFileDialog
モジュールを使用します。
import tkFileDialog
tkFileDialog.askopenfilename()
Python 3では、tkinter.filedialog
モジュールを使用します。
import tkinter.filedialog
tkinter.filedialog.askopenfilename()
これは私のために働いた
参照: https ://www.youtube.com/watch?v = H71ts4XxWYU
import tkinter as tk
from tkinter import filedialog
root = tk.Tk()
root.withdraw()
file_path = filedialog.askopenfilename()
print(file_path)
考慮すべきもう1つのオプションは、Zenityです:http://freecode.com/projects/zenity。
Pythonサーバーアプリケーション(GUIコンポーネントなし)を開発しているため、Python GUIツールキットへの依存関係を導入したくないという状況がありましたが、デバッグスクリプトの一部を入力ファイルでパラメーター化して、コマンドラインでファイルを指定しなかった場合は、ユーザーにファイルの入力を視覚的に求めます。Zenityはぴったりでした。これを実現するには、サブプロセスモジュールを使用して「zenity--file-selection」を呼び出し、stdoutをキャプチャします。もちろん、このソリューションはPython固有のものではありません。
Zenityは複数のプラットフォームをサポートしており、開発サーバーにすでにインストールされているため、不要な依存関係を導入することなく、デバッグ/開発が容易になりました。
後の重複する質問へのこの回答で示唆されているように、私はtkinterよりもwxPythonではるかに良い結果を得ました:
https://stackoverflow.com/a/9319832
wxPythonバージョンは、xfceデスクトップを使用したOpenSUSE Tumbleweedインストール上の他のほぼすべてのアプリケーションのファイルダイアログを開くのと同じように見えるファイルダイアログを生成しましたが、tkinterは、見慣れない横スクロールインターフェイスでは窮屈で読みにくいものを生成しました。
これは、ターミナルウィンドウにファイルチューザーを表示する簡単な関数です。この方法は、複数のファイルまたはディレクトリの選択をサポートします。これには、GUIがサポートされていない環境でも実行できるという追加の利点があります。
from os.path import join,isdir
from pathlib import Path
from enquiries import choose,confirm
def dir_chooser(c_dir=getcwd(),selected_dirs=None,multiple=True) :
'''
This function shows a file chooser to select single or
multiple directories.
'''
selected_dirs = selected_dirs if selected_dirs else set([])
dirs = { item for item in listdir(c_dir) if isdir(join(c_dir, item)) }
dirs = { item for item in dirs if join(c_dir,item) not in selected_dirs and item[0] != "." } # Remove item[0] != "." if you want to show hidde
options = [ "Select This directory" ]
options.extend(dirs)
options.append("⬅")
info = f"You have selected : \n {','.join(selected_dirs)} \n" if len(selected_dirs) > 0 else "\n"
choise = choose(f"{info}You are in {c_dir}", options)
if choise == options[0] :
selected_dirs.add(c_dir)
if multiple and confirm("Do you want to select more folders?") :
return get_folders(Path(c_dir).parent,selected_dirs,multiple)
return selected_dirs
if choise == options[-1] :
return get_folders(Path(c_dir).parent,selected_dirs,multiple)
return get_folders(join(c_dir,choise),selected_dirs,multiple)
照会者をインストールするには、
pipインストールに関するお問い合わせ
提案されたroot.withdraw()
(ここでも)ウィンドウを削除する代わりに非表示にし、VS Codeでインタラクティブコンソールを使用するときに問題を引き起こしていました(「重複実行」エラー)。
「開く」または「名前を付けて保存」(Windowsの場合はpython 3)でファイルパスを返すための2つのスニペットを以下に示します。
import tkinter as tk
from tkinter import filedialog
filetypes = (
('Text files', '*.TXT'),
('All files', '*.*'),
)
# open-file dialog
root = tk.Tk()
filename = tk.filedialog.askopenfilename(
title='Select a file...',
filetypes=filetypes,
)
root.destroy()
print(filename)
# save-as dialog
root = tk.Tk()
filename = tk.filedialog.asksaveasfilename(
title='Save as...',
filetypes=filetypes,
defaultextension='.txt'
)
root.destroy()
print(filename)
# filename == 'path/to/myfilename.txt' if you type 'myfilename'
# filename == 'path/to/myfilename.abc' if you type 'myfilename.abc'
私はに関連するすべての問題を解決しました
from tkinter import * from tkinter import filedialog
pycharm IDEからビジュアルスタジオコードIDEに移行するだけで、すべての問題が解決されます。