我目前正在使用 Tkinter 在 python 中编写 GUI,用户可以使用扩展名“.espace”将 GUI 的状态保存在其目录中。
filename = tkFileDialog.asksaveasfilename(defaultextension=".espace")
如果用户指定不同的文件扩展名,则文件将以他们指定的扩展名保存。有什么办法可以防止这种情况发生吗?这样他们就完全只能保存扩展名为“.espace”的文件了?
您可以使用“文件类型”选项指定文件类型。下面的示例将保存对话框中的文件类型下拉列表更改为 .espace 和所有文件。
filename = tkFileDialog.asksaveasfilename(defaultextension=".espace", filetypes=(("espace file", "*.espace"),("All Files", "*.*") ))
我没有找到使用asksaveasfilename来限制使用其他文件扩展名的选项。我认为你可以编写一个循环来强制用户使用该扩展:
import os
import sys
ext = ""
while ext != ".escape":
filename = tkFileDialog.asksaveasfilename(defaultextension=".espace", filetypes=(("espace file", "*.espace"),("All Files", "*.*") ))
file,ext = os.path.splitext(filename)
嗨,我知道我迟到了 7 年,但你可以强制你的扩展程序在对话框后执行一个简单的 if 命令,只需添加以下简单的行:
filename = filename if ".space" in filename else filename + ".space"
基本上检查是否使用了默认扩展名,如果没有,则会将其添加到末尾。如果用户输入其他扩展名,它将失效。
为了让@IsraelJ的解决方案适用于不同的扩展并抵抗大小写字母,我建议:
fileext = ".space"
filename = filename if filename[-len(fileext):].lower() == fileext else filename + fileext
我迟到了快11年了, 但刚刚遇到了同样的错误。 遗憾的是上面的解决方案对我不起作用, 为了修复它,我添加了一个默认类型,然后一切都按预期工作。
filedialog.asksaveasfilename(defaultextension='.json', filetypes=[("csv", ".csv"), ("Json", ".json")])