ここでは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作成
xt = 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()
1の部分ではボタンをクリックしたときの処理を関数化したものです。内容としては、entryに何かしら文字列があったら削除して、pathを書き込むというものです。
entryに文字列があるかどうかは「get()」を用いて取得しています。
書き込む場合は、「insert()」を用います。引数に位置と書き込む内容を指定します。
【結果】

テキストファイルを読込んで出力
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の部分ではテキストウィジェットを作成しています。
【結果】
