161

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

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

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

4

11 に答える 11

254

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)

終わり!

于 2010-08-26T21:22:12.983 に答える
102

完全性のためのEtaoinの答えのPython3.xバージョン:

from tkinter.filedialog import askopenfilename
filename = askopenfilename()
于 2010-08-26T21:43:40.193 に答える
38

EasyGui

import easygui
print(easygui.fileopenbox())

インストールするには:

pip install easygui

デモ:

import easygui
easygui.egdemo()
于 2010-08-26T21:37:23.463 に答える
13

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

import tkFileDialog

tkFileDialog.askopenfilename()

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

import tkinter.filedialog

tkinter.filedialog.askopenfilename()
于 2010-08-26T21:21:55.807 に答える
6

これは私のために働いた

参照: 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)
于 2021-06-13T05:21:01.710 に答える
4

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

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

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

于 2013-05-22T19:46:12.347 に答える
3

後の重複する質問へのこの回答で示唆されているように、私はtkinterよりもwxPythonではるかに良い結果を得ました:

https://stackoverflow.com/a/9319832

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

于 2020-04-23T00:49:32.687 に答える
1

これは、ターミナルウィンドウにファイルチューザーを表示する簡単な関数です。この方法は、複数のファイルまたはディレクトリの選択をサポートします。これには、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インストールに関するお問い合わせ

于 2021-03-07T13:36:51.017 に答える
1

提案された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'
于 2021-08-15T00:02:06.447 に答える
1

Plyerを使用すると、Windows、macOS、Linux、さらにはAndroidでネイティブファイルピッカーを入手できます。

import plyer

plyer.filechooser.open_file()

他に2つの方法がchoose_dirありsave_fileます。詳細については、こちらのドキュメントをご覧ください。

于 2021-09-30T13:24:32.917 に答える
0

私はに関連するすべての問題を解決しました from tkinter import * from tkinter import filedialog

pycharm IDEからビジュアルスタジオコードIDEに移行するだけで、すべての問題が解決されます。

于 2021-07-12T12:25:54.977 に答える