ファイルを解析し、その内容をデータベースにロードする簡単なスクリプトがあります。 UIは必要ありませんが、今のところ、特にユーザーがパスをコピー/貼り付けできないため、raw_input
を使用して解析するファイルの解析をユーザーに求めています。ユーザーにファイル選択ダイアログを表示する迅速で簡単な方法が欲しいのですが、ユーザーはファイルを選択して、データベースにロードします。 (私の使用例では、偶然間違ったファイルを選択した場合、解析に失敗し、データベースにロードされていても問題はありません。)
import tkFileDialog
file_path_string = tkFileDialog.askopenfilename()
このコードは私が望むものに近いですが、迷惑な空のフレームを開いたままにします(おそらく、閉じるイベントハンドラーを登録していないため、閉じることができません)。
TkInterを使用する必要はありませんが、Python標準ライブラリにあるため、最も迅速で簡単なソリューションの候補として適しています。
他のUIを使用せずにスクリプト内のファイルまたはファイル名をすばやく簡単に入力する方法はありますか?
Tkinterは、他の依存関係を持ちたくない場合に最も簡単な方法です。他のGUI要素なしでダイアログのみを表示するには、 withdraw
メソッドを使用してルートウィンドウを非表示にする必要があります。
import tkinter as tk
from tkinter import filedialog
root = tk.Tk()
root.withdraw()
file_path = filedialog.askopenfilename()
Python 2バリアント:
import Tkinter, tkFileDialog
root = Tkinter.Tk()
root.withdraw()
file_path = tkFileDialog.askopenfilename()
wxPython で試してください:
import wx
def get_path(wildcard):
app = wx.App(None)
style = wx.FD_OPEN | wx.FD_FILE_MUST_EXIST
dialog = wx.FileDialog(None, 'Open', wildcard=wildcard, style=style)
if dialog.ShowModal() == wx.ID_OK:
path = dialog.GetPath()
else:
path = None
dialog.Destroy()
return path
print get_path('*.txt')
UIが不要な場合、またはプログラムがCLIで実行されると予想される場合は、引数としてファイルパスを解析できます。これにより、CLIのオートコンプリート機能を使用して、必要なファイルをすばやく見つけることができます。
これはおそらく、スクリプトがファイルパス入力以外に非対話型である場合にのみ便利です。
EasyGUIを確認してください。これは、非常に使いやすいモジュールで、仕事をする必要があります- http://easygui.sourceforge.net/
このAPIドキュメントページで詳しく説明されているfileopenbox関数を使用します。 https://easygui.readthedocs.io/en/latest/api.html
pywin32
は、GetOpenFileName
win32関数へのアクセスを提供します。 例 から
import win32gui, win32con, os
filter='Python Scripts\0*.py;*.pyw;*.pys\0Text files\0*.txt\0'
customfilter='Other file types\0*.*\0'
fname, customfilter, flags=win32gui.GetOpenFileNameW(
InitialDir=os.environ['temp'],
Flags=win32con.OFN_ALLOWMULTISELECT|win32con.OFN_Explorer,
File='somefilename', DefExt='py',
Title='GetOpenFileNameW',
Filter=filter,
CustomFilter=customfilter,
FilterIndex=0)
print 'open file names:', repr(fname)
print 'filter used:', repr(customfilter)
print 'Flags:', flags
for k,v in win32con.__dict__.items():
if k.startswith('OFN_') and flags & v:
print '\t'+k