限制使用 tkFileDialog.asksaveasfile 时保存的文件扩展名

问题描述 投票:0回答:4

我目前正在使用 Tkinter 在 python 中编写 GUI,用户可以使用扩展名“.espace”将 GUI 的状态保存在其目录中。

filename = tkFileDialog.asksaveasfilename(defaultextension=".espace")

如果用户指定不同的文件扩展名,则文件将以他们指定的扩展名保存。有什么办法可以防止这种情况发生吗?这样他们就完全只能保存扩展名为“.espace”的文件了?

python user-interface tkinter
4个回答
13
投票

您可以使用“文件类型”选项指定文件类型。下面的示例将保存对话框中的文件类型下拉列表更改为 .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)

2
投票

嗨,我知道我迟到了 7 年,但你可以强制你的扩展程序在对话框后执行一个简单的 if 命令,只需添加以下简单的行:

filename = filename if ".space" in filename else filename + ".space"

基本上检查是否使用了默认扩展名,如果没有,则会将其添加到末尾。如果用户输入其他扩展名,它将失效。


2
投票

为了让@IsraelJ的解决方案适用于不同的扩展并抵抗大小写字母,我建议:

fileext = ".space"
filename = filename if filename[-len(fileext):].lower() == fileext else filename + fileext

0
投票

我迟到了快11年了, 但刚刚遇到了同样的错误。 遗憾的是上面的解决方案对我不起作用, 为了修复它,我添加了一个默认类型,然后一切都按预期工作。

filedialog.asksaveasfilename(defaultextension='.json', filetypes=[("csv", ".csv"), ("Json", ".json")])
© www.soinside.com 2019 - 2024. All rights reserved.