Python tkinter / ファイルダイアログで複数ファイルを読み込み、そのファイル名を取得するだけのGUIアプリ

PythonのGUI作成ライブラリ「tkinter」でGUIアプリを作成してみました。

まあ、実際のところは今回もアプリというほどのものじゃなく、単にファイル名を取得しているだけのものですがww

tkinterのファイルダイアログで複数ファイルを選択することは比較的に簡単にできると思います。今回、それをtkinterでGUIアプリっぽくして、選択された全てのファイル名を表示するプログラムを書いてみました。


いつものウインドウを使い回しています。大きなフレームの中に、メニュー用のフレーム(左側)、ファイル名表示用のフレーム(右側)を作成しています。

ファイル選択ボタンを押すと、ファイルダイアログが立ち上がります。複数ファイルが選択できるようにtkinterの「askopenfilenames」を使用しました。

askopenfilenameでは単一のファイルの選択、
askopenfilenamesでは複数ファイルが選択できます。
異なる点は、最後に「s」が付いているかどうかです。


ファイルを選択すると、右側のテキストボックスに選択したファイル名が表示されます。

表示されるのは、インデックス番号とファイル名です。

左側にも、選択したファイルの数が表示されます。(右側のテキストボックスにインデックス番号を表示しているので、ファイル数の表示はなくても良いのですけど。。。)

以下がサンプルプログラムとなります。(Pythonは学習中のため無駄な記述などがある場合があることご了承ください)

サンプルプログラム

#ライブラリのインポート
import tkinter as tk
import tkinter.filedialog
import cv2
import os

#ファイル選択、ファイル名を表示する関数
def getfile():
    f_path = tk.filedialog.askopenfilenames(title="ファイル選択", initialdir="ディレクトリを入力", filetypes=[("Image file", ".png .jpg .jpeg")])
    text_widget.delete("1.0", "end")
    files = (len(f_path))
    en.insert(0, int(files))
    for i, f_paths in enumerate(f_path, start=1):
        name = os.path.basename(f_paths) 
        text_widget.insert("insert +1lines", str(i)+":"+name+"\n")
        
#ウインドウの作成
root = tk.Tk()
#ウインドウのタイトル
root.title("tk ファイルダイアログ 複数ファイル名表示")
#ウインドウサイズと位置指定 幅,高さ,x座標,y座標 
root.geometry("800x520+50+50")

#フレームの作成
frame = tk.Frame(root, width=780, height=490, padx=10, pady=10, bg="#D9D9D9")
frame.place(x=10, y=10)

frame_menu = tk.Frame(frame, relief=tk.FLAT, bg="#E6E6E6", bd=2)
frame_menu.place(x=10, y=10, width=150, height=450)

frame_img = tk.Frame(frame, relief=tk.FLAT, bg="#E6E6E6", bd=2)
frame_img.place(x=170, y=10, width=580, height=450)

#選択されたファイル テキストボックスの作成
text_widget = tk.Text(frame_img, height=30, width=80)
text_widget.grid(row=1, column=0, sticky = tk.W)

#ファイルす テキストボックスの作成
en = tk.Entry(frame_menu, width=15)
en.grid(row=2, column=0, sticky = tk.W)

#Labelの生成
l = tk.Label(frame_menu,text="ファイル数", relief="flat")
l.grid(row=1, column=0, sticky = tk.W)
l_text = tk.Label(frame_img,text="選択されたファイル", relief="flat")
l_text.grid(row=0, column=0, sticky = tk.W)

#ボタン作成
button = tk.Button(frame_menu, text="ファイル選択", command=getfile)
button.grid(row=0, column=0, sticky = tk.W)

#イベントループ
root.mainloop()
注記
・「initialdir」にはディレクトリを入力してください。
・ファイルはpng, jpeg, jpgを選択できるようにしています。
タイトルとURLをコピーしました