TkInter在文件名模式匹配中插入虚假通配符

时间:2018-07-26 18:45:57

标签: python python-3.x user-interface tkinter fileopendialog

我正在尝试向用户显示适合特定格式文件的文件打开对话框。它们的格式为 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 AskOpenFileDialog Bug?

我做错什么了吗?我找不到有关TkInter中该接口如何工作的任何不错的文档,因此也许它比我预期的要受限制。如果是这样,是否有一个内置的Python库可以支持此特定用例?

如果与该问题有关,我在Windows 10上安装了32位Python。

1 个答案:

答案 0 :(得分:3)

filetypes中的值被解释为文件扩展名,而不是文件 patterns

official tcl/tk documentation(tkinter是tcl / tk的薄包装):

  

-filetypes选项给出的filePatternList值是文件模式的列表。每个文件模式都是表单的列表   typeName {extension ?extension ...?} ?{macType ?macType ...?}? typeName 是此文件模式描述的文件类型的名称,并且是出现在“文件类型”列表框中的文本字符串。 扩展名是此文件格式的文件扩展名

接着说:

  

由于各种平台上的模式匹配规则不同,为了确保可移植性,扩展名中不允许使用通配符,除非特殊扩展名“ *”除外。允许不带句号(例如“〜”)的扩展程序,但可能不适用于所有平台。