【发布时间】:2021-03-26 14:47:15
【问题描述】:
我想在 tkinter askopenfilename 对话框中接受某个文件 config.cfg,这是我的代码。
mod_config_path = tkinter.filedialog.askopenfilename(parent=None,
title="Select config.cfg file",
initialdir=steamapps,
filetypes=[("config.cfg", "config.cfg")])
问题是,filetypes=[("config.cfg", "config.cfg")] 没有做我想做的事。
我只想接受 config.cfg 文件,而不是以 config.cfg 结尾的 misc_config.cfg 或 otherconfig.cfg。但如下图,它接受*config.cfg文件,misc_config.cfg文件也显示在图片中。
所以,我想做的是,删除*config.cfg 中的*,使其只接受config.cfg 文件。
我在互联网上找不到任何相关的答案,这太令人失望了......
【问题讨论】:
-
这可能吗?我认为 tkinter 在您在那里提供的任何扩展名的第一个上添加了一个额外的
*。也许就这样,然后使用 python 来验证选择的文件只是config.cfg而不是somethingconfig.cfg。 -
这似乎是依赖于操作系统的行为。我正在使用 Linux,并且提供的代码完全符合我们的要求:我只看到“config.cfg”,而不是“misc_config.cfg”或“otherconfig.cfg”
-
@j_4321 我猜你是对的。 在 Unix 和 Macintosh 平台上,扩展使用 glob 样式的模式匹配进行匹配。在 Windows 平台上,扩展由底层操作系统匹配。 Source
-
您可以考虑使用
ctypes并尝试捕捉FileOK_Event,但这对我来说似乎工作量太大。如果您只想接受一个特殊文件,为什么不喜欢以编程方式获取它而不是用户选择? -
仅供reference MS 文档讨论这种情况。