tkinterでファイルダイアログを使う手順のメモです
フォルダを選択する
tkinter.filedialog.askdirectoryを使えばフォルダを選択するダイアログを開いてくれます。initialdirで初期ディレクトリを指定します。
python
import tkinter.filedialog
iDir = os.path.abspath(os.path.dirname(__file__))
folder_name = tkinter.filedialog.askdirectory(initialdir=iDir)
ファイルを選択する
tkinter.filedialog.askopenfilenameでファイルダイアログを開けます。filetypesで候補ファイルのパターンを指定し、initialdirで最初に開くディレクトリを指定します。複数ファイルを選択する場合はtkinter.filedialog.askopenfilenamesです。
python
import tkinter.filedialog
fTyp = [("", "*")]
iDir = os.path.abspath(os.path.dirname(__file__))
file_name = tkinter.filedialog.askopenfilename(filetypes=fTyp, initialdir=iDir)
ファイルの拡張子を指定できます。
見出し、パターンの順で与えます。
python
fTyp = [("データファイル", "*.csv;*.xlsx;*.xls")]
ファイル名の部分一致で選択する事もできます。
python
fTyp = [("logファイル", "log*")]
使用例
実際使うときはこんな感じで使うと良いと思います。
python
import os
import tkinter as tk
import tkinter.filedialog
class TkinterClass:
def __init__(self):
root = tk.Tk()
root.geometry("500x350")
button = tk.Button(root, text='ファイルダイアログを開く', font=('', 20),
width=24, height=1, bg='#999999', activebackground="#aaaaaa")
button.bind('<ButtonPress>', self.file_dialog)
button.pack(pady=40)
self.file_name = tk.StringVar()
self.file_name.set('未選択です')
label = tk.Label(textvariable=self.file_name, font=('', 12))
label.pack(pady=0)
button = tk.Button(root, text='フォルダダイアログを開く', font=('', 20),
width=24, height=1, bg='#999999', activebackground="#aaaaaa")
button.bind('<ButtonPress>', self.folder_dialog)
button.pack(pady=40)
self.folder_name = tk.StringVar()
self.folder_name.set('未選択です')
label = tk.Label(textvariable=self.folder_name, font=('', 12))
label.pack(pady=10)
root.mainloop()
def file_dialog(self, event):
fTyp = [("", "*")]
iDir = os.path.abspath(os.path.dirname(__file__))
file_name = tk.filedialog.askopenfilename(filetypes=fTyp, initialdir=iDir)
if len(file_name) == 0:
self.file_name.set('選択をキャンセルしました')
else:
self.file_name.set(file_name)
def folder_dialog(self, event):
iDir = os.path.abspath(os.path.dirname(__file__))
folder_name = tk.filedialog.askdirectory(initialdir=iDir)
if len(folder_name) == 0:
self.folder_name.set('選択をキャンセルしました')
else:
self.folder_name.set(folder_name)
if __name__ == '__main__':
TkinterClass()

余談
上手くいくimport
import tkinter as tk
import tkinter.filedialog
tk.filedialog.askdirectory(initialdir=iDir)
上手くいかないimport
import tkinter as tk
tk.filedialog.askdirectory(initialdir=iDir)
何故!?