目次
ファイルを保存するためのダイアログを表示する
ファイルを保存するためのダイアログを表示するには、
tkinter.filedialog
モジュールの
asksaveasfilename
関数を使います。
戻り値については、
ファイルダイアログでファイルを選択して、
「保存ボタン (Save)」をクリックした場合、
指定したファイルのパスが文字列で返ってきます。
また、「キャンセルボタン (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="SAVE",
command=self.show_save_dialog)
self.button1.pack(side="left")
def show_save_dialog(self):
fname = filedialog.asksaveasfilename()
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
表示内容 (メインウィンドウ):
表示内容 (メインウィンドウで SAVE ボタンをクリックして表示したファイルダイアログ):
表示内容 (ファイルダイアログで既存のファイル名を入力した場合の警告):
filetypes オプション
asksaveasfilename
関数を使う時に filetypes
オプションを指定すると、
ファイルダイアログで File of types が有効になります。
File of type で表示したい拡張子を選択すると、
選んだ拡張子を持つファイルだけが表示されます。
指定する値の型は、(label, pattern) のようなタプルのリストです。
例えば、PNG ファイルのみ表示したい場合は、
("PNG Image Files", ".png")
を指定するリストに追加します。
また、すべてのファイルを表示したい場合は、
("All Files", ".*")
をリストに追加します。
また、ファイルタイプ (File of type) の pattern で ".*" 以外を選択、
かつファイル名 (File name) に拡張子を入力していない場合、
返ってくるファイル名の末尾に pattern の拡張子が追加されます。
例えば、ファイル名に "image" と入力し、ファイルタイプの pattern が ".png" の場合、
"/dir1/dir2/image.png" といったパスが返ってきます。
initialfile オプション
asksaveasfilename
関数を使う時に initialfile
オプションを指定すると、
ファイル名の初期文字列を設定できます。
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="SAVE",
command=self.show_save_dialog)
self.button1.pack(side="left")
def show_save_dialog(self):
ftypes = [("PNG Image Files", ".png"),
("SVG Image Files", ".svg .xml"),
("All Files", ".*")]
ini_fname = "example"
fname = filedialog.asksaveasfilename(filetypes=ftypes,
initialfile=ini_fname)
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
表示内容 (ファイルダイアログで、PNG Image Files を選択した時):
表示内容 (ファイル名 "example" と入力した後のメインウィンドウ):
表示内容 (ファイルダイアログで、SVG Image Files を選択した時):
表示内容 (ファイルダイアログで、All Files を選択した時):
参考リンク
- TkDocs - Tk Tutorial - Windows and Dialogs # Standard Dialogs
- effbot.org - File Dialogs
- Tcl Developer Site - tk_getOpenFile manual page - Tk Built-In Commands