目次
ファイルを開くためのダイアログを表示する
ファイルを開くためのダイアログを表示するには、
tkinter.filedialog
モジュールの
askopenfilename
関数を使います。
戻り値については、
ファイルダイアログでファイルを選択して、
「開くボタン (Open)」をクリックした場合、
選択してあるファイルのパスが文字列で返ってきます。
また、「キャンセルボタン (Cancal)」や「閉じるボタン (X)」をクリックした場合、
判定で偽 (False
) となる値が返ってきます。
Example
source code
from tkinter import StringVar
from tkinter import Tk
from tkinter import filedialog
from tkinter import ttk
class MainFrame(ttk.Frame):
def __init__(self, master):
super().__init__(master)
self.configure(padding=(6, 4))
self.pack(expand=1, fill="x", anchor="n")
self.make_style()
self.create_widgets()
def make_style(self):
pass
def create_widgets(self):
self.label1 = ttk.Label(self, text="File:")
self.label1.pack(side="left", padx=(0, 2))
self.entry1_var = StringVar()
self.entry1 = ttk.Entry(self, textvariable=self.entry1_var,
width=32)
self.entry1.state(["readonly"])
self.entry1.pack(side="left", expand=1, fill="x", padx=(0, 6))
self.button1 = ttk.Button(self, text="OPEN",
command=self.show_open_dialog)
self.button1.pack(side="left")
def show_open_dialog(self):
fname = filedialog.askopenfilename()
if fname:
self.entry1_var.set(fname)
else:
print("Cancel or X button was clicked.")
root = Tk()
root.title("Tkinter win")
frame = MainFrame(root)
frame.mainloop()
result
表示内容 (メインウィンドウ):
表示内容 (メインウィンドウで OPEN ボタンをクリックして表示したファイルダイアログ):
filetypes オプション
askopenfilename
関数を使う時に filetypes
オプションを指定すると、
ファイルダイアログで File of types が有効になります。
File of type で表示したい拡張子を選択すると、
選んだ拡張子を持つファイルだけが表示されます。
指定する値の型は、(label, pattern) のようなタプルのリストです。
例えば、PNG ファイルのみ表示したい場合は、
("PNG Image Files", ".png")
を指定するリストに追加します。
また、すべてのファイルを表示したい場合は、
("All Files", ".*")
をリストに追加します。
Example
source code
from tkinter import StringVar
from tkinter import Tk
from tkinter import filedialog
from tkinter import ttk
class MainFrame(ttk.Frame):
def __init__(self, master):
super().__init__(master)
self.configure(padding=(6, 4))
self.pack(expand=1, fill="x", anchor="n")
self.make_style()
self.create_widgets()
def make_style(self):
pass
def create_widgets(self):
self.label1 = ttk.Label(self, text="File:")
self.label1.pack(side="left", padx=(0, 2))
self.entry1_var = StringVar()
self.entry1 = ttk.Entry(self, textvariable=self.entry1_var,
width=32)
self.entry1.state(["readonly"])
self.entry1.pack(side="left", expand=1, fill="x", padx=(0, 6))
self.button1 = ttk.Button(self, text="OPEN",
command=self.show_open_dialog)
self.button1.pack(side="left")
def show_open_dialog(self):
ftypes = [("PNG Image Files", ".png"),
("SVG Image Files", ".svg .xml"),
("All Files", ".*")]
fname = filedialog.askopenfilename(filetypes=ftypes)
if fname:
self.entry1_var.set(fname)
else:
print("Cancel or X button was clicked.")
root = Tk()
root.title("Tkinter win")
frame = MainFrame(root)
frame.mainloop()
result
表示内容 (ファイルダイアログで、All Files を選択した時):
表示内容 (ファイルダイアログで、PNG Image Files を選択かつ任意のファイルを選択した時):
表示内容 (ファイルダイアログで、SVG Image Files を選択かつ任意のファイルを選択した時):
スタイル設定時の注意
Tkinter のバージョン 8.6 時点では、 特定のウィジェットに一括してスタイルを設定している場合、 ファイルダイアログにも影響が有ります。
よって、スタイルを一括して設定する時は、 ファイルダイアログの見栄えが悪くならないように気をつける必要が有るかもしれません。
次の Example はラベル、テキストボックス、ボタンのスタイルを設定した時の例です。
Example
source code
from tkinter import StringVar
from tkinter import Tk
from tkinter import filedialog
from tkinter import ttk
class MainFrame(ttk.Frame):
def __init__(self, master):
super().__init__(master)
self.configure(padding=(6, 4))
self.pack(expand=1, fill="x", anchor="n")
self.make_style()
self.create_widgets()
def make_style(self):
s = ttk.Style()
s.configure("TLabel", background="#ffff00")
s.configure("TEntry", foreground="#ff0000")
s.configure("TButton", font=("", 16))
def create_widgets(self):
self.label1 = ttk.Label(self, text="File:")
self.label1.pack(side="left", padx=(0, 2))
self.entry1_var = StringVar()
self.entry1 = ttk.Entry(self, textvariable=self.entry1_var,
width=32)
self.entry1.state(["readonly"])
self.entry1.pack(side="left", expand=1, fill="x", padx=(0, 6))
self.button1 = ttk.Button(self, text="OPEN",
command=self.show_open_dialog)
self.button1.pack(side="left")
def show_open_dialog(self):
fname = filedialog.askopenfilename()
if fname:
self.entry1_var.set(fname)
else:
print("Cancel or X button was clicked.")
root = Tk()
root.title("Tkinter win")
frame = MainFrame(root)
frame.mainloop()
result
表示内容 (ファイルダイアログで、ファイルを選択した時):
表示内容 (ファイルを選択した後のメインウィンドウ):
参考リンク
- TkDocs - Tk Tutorial - Windows and Dialogs # Standard Dialogs
- effbot.org - File Dialogs
- Tcl Developer Site - tk_getOpenFile manual page - Tk Built-In Commands