27
36

More than 3 years have passed since last update.

python GUIでファイルダイアログを開く (tkinter.filedialog)

Last updated at Posted at 2020-05-17

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)

何故!?

27
36
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
27
36