フォルダ選択してファイル一覧を取得するには?
業務プログラムを作成時には利用者にコマンドラインなどのCUIから処理させずにより利便性の高いGUIから利用してもらいたい場合があります。
本記事では、Python における GUI パッケージのデファクトスタンダードのtkinterを利用してGUI画面からフォルダ選択してファイル一覧を取得する方法を紹介します。
GUI画面からフォルダ選択してファイル一覧を取得サンプルコード
GUI画面からファイル一覧を取得するコードを紹介します。
# GUI表示で利用
import tkinter as tk
from tkinter import filedialog, messagebox
# ファイルとディレクトリの操作に使用
import os
def open_folder():
# フォルダ選択ダイアログの表示
folder_selected = filedialog.askdirectory()
if folder_selected:
# 選択されたフォルダのパスをラベルにセット
label_folder_path.config(text=folder_selected)
def exec_app():
# 選択されたフォルダパスを取得
folder = label_folder_path.cget("text")
if folder:
# フォルダ内のファイルとサブディレクトリのリストを取得
file_list = os.listdir(folder)
file_list_str = '\n'.join(file_list) # リストを文字列に変換
messagebox.showinfo("フォルダ内容一覧", file_list_str)
else:
messagebox.showwarning("警告", "フォルダが選択されていません")
def close_app():
# アプリケーションの終了
root.destroy()
""" tkinterでフォルダ選択とファイル一覧を読み込みするGUI画面 """
# GUIの設定
root = tk.Tk()
root.title("フォルダ内のファイル一覧を読み込みする")
# ボタンの設定(幅と高さを統一)
button_width = 10
button_height = 1
# 上部フレーム(ラベルとフォルダ選択ボタン用)
top_frame = tk.Frame(root)
top_frame.pack(pady=10)
# フォルダパスを表示するラベル(背景色を薄い黄色に設定、テキストを左寄せに設定)
label_folder_path = tk.Label(top_frame, text="", width=50, bg='#ffffe0', anchor='w', justify=tk.LEFT)
label_folder_path.pack(side=tk.LEFT)
# フォルダ選択ボタン
button_select_folder = tk.Button(top_frame, text="フォルダ選択", command=open_folder, width=button_width, height=button_height)
button_select_folder.pack(side=tk.LEFT, padx=10)
# 下部フレーム(実行ボタンと終了ボタン用)
bottom_frame = tk.Frame(root)
bottom_frame.pack(side=tk.BOTTOM, anchor='e')
# 実行ボタン
button_exec = tk.Button(bottom_frame, text="実行", command=exec_app, width=button_width, height=button_height)
button_exec.pack(side=tk.LEFT, padx=5)
# 終了ボタン
button_close = tk.Button(bottom_frame, text="終了", command=close_app, width=button_width, height=button_height)
button_close.pack(side=tk.LEFT, padx=5)
# GUIの開始
root.mainloop()
このサンプルではopen_folder関数でフォルダ選択、exec_app関数でファイル一覧取得しています。
実行結果
初期画面として以下の簡単な画面が出ます。
フォルダ選択ボタンからフォルダを選択して実行するとフォルダ内の内容がメッセージ表示されます。
最後に
以上がGUI画面からファイル一覧を取得する例となります。
例としてフォルダ内のEXCELファイルを一括で印刷して事務員の作業効率化等が考えられます。シチュエーションに合わせて利用してみてはいかがでしょうか。
コメント