名前を付けて保存ダイアログボックスを表示するには、tkinter.filedialogモジュールのasksaveasfilename()関数を使います。
以下にシンプルなサンプルプログラムを示します。
from tkinter import filedialog
filename = filedialog.asksaveasfilename()
print(filename)
(実行結果)
オプション
オプション名 | 説明 |
parent | ダイアログを表示する親のウィンドウを指定します。 |
title | ダイアログのタイトルを指定します。 |
initialdir | 最初に表示されるディレクトリを指定します。 |
initialfile | 最初に選択されているファイル名を指定します。 |
filetypes | 選択可能なファイルの種類を設定します。 |
defaultextension | 拡張子が入力されない場合に追加する拡張子を指定します。 |
(参考)
https://docs.python.org/ja/3/library/dialog.html?highlight=askopenfilename#module-tkinter.filedialog
名前を付けて保存ダイアログボックスはファイルを開くダイアログボックスとも似ていますが、defaultextensionオプションが異なります。
これは名前を付けて保存ダイアログの「ファイル名」の部分に拡張子を指定しなかった場合に、defaultextensionオプションで指定した拡張子が付加されます。
それでは、defaultextensionオプションを指定せずにfiletypesオプションを指定すると、どうなるか?というと、「ファイル名」の部分に、拡張子を付けずにファイル名を入力しても、「ファイルの種類」で指定された拡張子で、拡張子が自動で付加される事はありません。
filename = filedialog.asksaveasfilename(
filetypes = [("Bitmap", ".bmp"), ("PNG", ".png"), ("JPEG", ".jpg"), ("Tiff", ".tif") ], # ファイルフィルタ
)
そのため、filetypesオプションとdefaultextensionオプションは両方指定して、以下のようにします。
from tkinter import filedialog
filename = filedialog.asksaveasfilename(
title = "名前を付けて保存",
filetypes = [("Bitmap", ".bmp"), ("PNG", ".png"), ("JPEG", ".jpg"), ("Tiff", ".tif") ], # ファイルフィルタ
initialdir = "./", # 自分自身のディレクトリ
defaultextension = "bmp"
)
print(filename)
このようにすると、「ファイルの種類」で指定された拡張子で、自動で拡張子が付加されます。
上記のプログラムではdefaultextension が “bmp”ですが、「ファイルの種類」がPNGのときは、ちゃんと.pngを付加してくれます。
もっというと、defaultextension = “” としても、「ファイルの種類」で指定された拡張子が付加されます。
(実行結果)