ここではTkinterにおける「Filedialog」の使用例をまとめています。
この記事の対象
Filedialogとは?
Filedialogとはファイルを選択することが可能になるtkinterのパッケージです。
ファイルを開く、保存する場合に使用するものです。
基本的な型
フォルダディレクトリ参照
filedialog.askdirectory()
フォルダのディレクトリを取得したい場合に使用します。
ファイルディレクトリ参照
filedialog.askopenfilename()
ファイルのディレクトリを取得したい場合に使用します。
ファイル読み込み
filedialog.askopenfile()
ファイル読み込みしたい場合に使用します。
ファイル保存
filedialog.asksaveasfilename()
保存先のディレクトリを取得したい場合に使用します。
オプションは以下の通りです。
Option | 内容 |
parents | ダイアログをその上に表示するウィンドウ |
title | ウィンドウのタイトル |
initialdir | 最初に表示するディレクトリ |
nitialfile | ダイアログを表示した際に選択するファイル |
filetypes | (ラベル, パターン) のタプルからなるシーケンスで、’*’ が利用できる |
defaultextension | ファイルに追加するデフォルトの拡張子 (保存ダイアログ向け) |
multiple | 真の場合、複数要素の選択を許可 |
ディレクトリの参照
from tkinter import *
import tkinter as tk
from tkinter import filedialog
#1---ボタンクリック
def btn_click():
dirname = filedialog.askdirectory() #askdirectory
if len(txt.get()) >= 1 :
txt.delete(0, tk.END)
txt.insert(tk.END,dirname)#txtへの插入
#2---画面生成
root = Tk()
root.title("Test")
root.configure()
root.geometry("640x395")
#3---entry作成
txt = tk.Entry(width = 65, bg = "#FAF8EC")
txt.place(x=10, y=10)
#4---ボタン作成
button = Button( text = "参照", command = btn_click)
button.pack(expand=True, anchor=tk.CENTER)
root.mainloop()
上記のプログラムはFiledialogで選択したディレクトリのPathをEntryに出力する内容になっています。
以下は、解説になります。
#1---ボタンクリック
def btn_click():
dirname = filedialog.askdirectory() #askdirectory
if len(txt.get()) >= 1 :
txt.delete(0, tk.END)
txt.insert(tk.END,dirname)#txtへの插入
1の部分ではボタンをクリックしたときの処理を関数化したものです。内容としては、Entryに何かしら文字列があったら削除して、Pathを書き込むというものです。
Entryに文字列があるかどうかは「get()」を用いて取得しています。
書き込む場合は、「insert()」を用います。引数に位置と書き込む内容を指定します。
#2---画面生成
root = Tk()
root.title("Test")
root.configure()
root.geometry("640x395")
2の部分では、画面を作成しています。
#3---entry作成
txt = tk.Entry(width = 65, bg = "#FAF8EC")
txt.place(x=10, y=10)
3の部分では、出力用のEntryになります。
#4---ボタン作成
button = Button( text = "参照", command = btn_click)
button.pack(expand=True, anchor=tk.CENTER)
4の部分では、Filedialogを実行するためのトリガーであるボタンになります。
ボタンに関する詳細は以下をご参照下さい。
>>>Tkinterでアプリ作成–buttonの使用例まとめ-
結果
テキストファイルを読込んで出力
import tkinter as tk
from tkinter import filedialog, scrolledtext
def open_file():
#1---ファイルダイアログを開く
file_path = filedialog.askopenfilename()
try:
#2---ファイルを開く
with open(file_path, 'r', encoding='utf-8') as f:
text = f.read()
except UnicodeDecodeError:
#3---UTF-8で読み込めない場合はShift-JISで読み込む
with open(file_path, 'r', encoding='shift_jis') as f:
text = f.read()
#4---テキストウィジェットに表示する
text_box.delete('1.0', tk.END)
text_box.insert('1.0', text)
#5---tkinterウィンドウを作成する
root = tk.Tk()
#6---ファイルを開くボタンを作成する
open_button = tk.Button(root, text='参照', command=open_file)
open_button.pack()
#7---テキストウィジェットを作成する
text_box = scrolledtext.ScrolledText(root)
text_box.pack()
root.mainloop()
上記のプログラムは、任意のファイルを読込んで、「ScrolledText」で出力する内容になっています。ScrolledTextについては以下をご参照下さい。
それでは解説になります。
def open_file():
#1---ファイルダイアログを開く
file_path = filedialog.askopenfilename()
1の部分は、ボタンを押したら実行する関数の内容になります。最初にダイアログを開いています。
try:
#2---ファイルを開く
with open(file_path, 'r', encoding='utf-8') as f:
text = f.read()
2の部分では、選択したファイルを読み込んでいます。utf-8を指定しています。
except UnicodeDecodeError:
#3---UTF-8で読み込めない場合はShift-JISで読み込む
with open(file_path, 'r', encoding='shift_jis') as f:
text = f.read()
3の部分ではUTF-8で読み込めない場合にShift-JISで読み込むようにしています。
#4---テキストウィジェットに表示する
text_box.delete('1.0', tk.END)
text_box.insert('1.0', text)
4の部分では読み込んだ内容をテキストウィジェットに表示しています。
#5---tkinterウィンドウを作成する
root = tk.Tk()
5の部分では、ウィンドウを作成しています。
#6---ファイルを開くボタンを作成する
open_button = tk.Button(root, text='参照', command=open_file)
open_button.pack()
6の部分では、ボタンを作成しています。
#7---テキストウィジェットを作成する
text_box = scrolledtext.ScrolledText(root)
text_box.pack()
7の部分ではテキストウィジェットを作成しています。
結果
特定の種類のファイルのみを選択
import tkinter as tk
from tkinter import filedialog
def open_image():
file_path = filedialog.askopenfilename(title="画像ファイルを選択してください", filetypes=[("Image files", "*.png;*.jpg;*.gif")])
if file_path:
print("選択された画像ファイル:", file_path)
root = tk.Tk()
button = tk.Button(root, text="画像を選択", command=open_image)
button.pack()
root.mainloop()
上記のプログラムは、filetypes
引数を使用して、特定の種類のファイルのみを選択できるようにするプログラムになります。画像ファイル(PNG、JPEG、GIF)のみが表示されるようにしています。
結果
複数のファイルを選択する
import tkinter as tk
from tkinter import filedialog
def open_files():
file_paths = filedialog.askopenfilenames(title="ファイルを選択してください")
if file_paths:
print("選択されたファイル:")
for path in file_paths:
print(path)
root = tk.Tk()
button = tk.Button(root, text="複数のファイルを選択", command=open_files)
button.pack()
root.mainloop()
上記のプログラムは、askopenfilenames
を使用して複数のファイルを選択し、選択されたファイルのパスを表示するプログラムになります。
結果
省略