3

我正在尝试向用户展示适合特定模式的文件的文件打开对话框。它们的形式为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 错误?

难道我做错了什么?我找不到任何关于 TkInter 中的这个接口应该如何工作的像样的文档,所以它可能比我预期的要有限。如果是这样,是否有一个内置的 Python 库可以支持这个特定的用例?

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

4

1 回答 1

3

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

来自官方 tcl/tk 文档(tkinter 是 tcl/tk 的薄包装):

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

它继续说:

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

于 2018-07-26T19:14:23.317 回答