我正在尝试向用户显示适合特定格式文件的文件打开对话框。它们的格式为 prefix _ *。suffix ,其中星号表示通配符。
这是我假设应该使用TkInter完成此操作的一个最小示例:
from tkinter.filedialog import askopenfilename
my_dir = 'C:\\path\\to\\some\\directory'
pattern = (('File type', 'prefix_*.suffix'),)
title = 'Title'
my_file = askopenfilename(initialdir=my_dir, filetypes=pattern, title=title)
但是,出现的对话框将伪造的通配符添加到我的模式的前面,因此现在看起来像 * prefix _ *。suffix 。这不是我所期望的。
我做错什么了吗?我找不到有关TkInter中该接口如何工作的任何不错的文档,因此也许它比我预期的要受限制。如果是这样,是否有一个内置的Python库可以支持此特定用例?
如果与该问题有关,我在Windows 10上安装了32位Python。
答案 0 :(得分:3)
filetypes
中的值被解释为文件扩展名,而不是文件 patterns 。
从official tcl/tk documentation(tkinter是tcl / tk的薄包装):
-filetypes选项给出的filePatternList值是文件模式的列表。每个文件模式都是表单的列表
typeName {extension ?extension ...?} ?{macType ?macType ...?}?
typeName 是此文件模式描述的文件类型的名称,并且是出现在“文件类型”列表框中的文本字符串。 扩展名是此文件格式的文件扩展名。
接着说:
由于各种平台上的模式匹配规则不同,为了确保可移植性,扩展名中不允许使用通配符,除非特殊扩展名“ *”除外。允许不带句号(例如“〜”)的扩展程序,但可能不适用于所有平台。