我正在尝试在tkinter中创建一个savefile对话框.我需要保存文件名以便以后使用.但是,我不希望filedialog接受选择已存在的文件名.
到目前为止我只有这个:
from tkinter import filedialog
my_file = filedialog.asksaveasfilename(defaultextension = ".myfile",
filetypes = [("MYSUPERFILE", ".myfile"),
("All files", ".*")])
一种可能性是获取文件名,检查它是否存在(使用os.path.isfile)并再次询问用户是否存在具有相同名称的文件的新名称.但是,tkinter filedialog会询问用户“文件是否已存在.是否要覆盖?”.因此,如果稍后我告诉用户我不接受文件名选择,这似乎令人困惑.有没有办法强制tkinter filedialog不要求用户覆盖?
编辑:根据答案中的建议,我尝试创建自己的保存文件对话框.
我基本上只在tkinter保存对话框中添加了一个警告:
class MySaveFileDialog(filedialog.FileDialog):
"""File save dialog that does not allow overwriting of existing file"""
def ok_command(self):
file = self.get_selection()
if os.path.exists(file):
if os.path.isdir(file):
self.master.bell()
return
messagebox.showarning("The current file name already exists. Please give another name to save your file.")
else:
head, tail = os.path.split(file)
if not os.path.isdir(head):
self.master.bell()
return
self.quit(file)
所以,它看起来很简单.然后我想:我需要创建自己的asksaveasfilename函数.
我去检查来源:
def asksaveasfilename(**options):
"Ask for a filename to save as"
return SaveAs(**options).show()
嗯..我需要看看SaveAs在做什么.
class SaveAs(_Dialog):
"Ask for a filename to save as"
command = "tk_getSaveFile"
Aaannddd ……我迷路了.我不明白这些碎片是如何组合在一起的. ‘SaveAs’只有tk_getSaveFile命令. SaveFileDialog如何在这里使用?我怎样才能创建自己的myasksaveasfilename函数?