TkInter 在文件名模式匹配中插入虚假通配符
TkInter inserts spurious wildcard in filename pattern matching
我正在尝试向用户显示适合特定模式的文件的文件打开对话框。它们的格式为 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。
filetypes
中的值被解释为文件 extensions,而不是文件 patterns.
来自 official tcl/tk documentation(tkinter 是 tcl/tk 的薄包装):
The filePatternList value given by the -filetypes option is a list of file patterns. Each file pattern is a list of the form
typeName {extension ?extension ...?} ?{macType ?macType ...?}?
typeName is the name of the file type described by this file pattern and is the text string that appears in the File types listbox. extension is a file extension for this file pattern.
接着说:
Due to the different pattern matching rules on the various platforms, to ensure portability, wild card characters are not allowed in the extensions, except as in the special extension “*”. Extensions without a full stop character (e.g. “~”) are allowed but may not work on all platforms.
我正在尝试向用户显示适合特定模式的文件的文件打开对话框。它们的格式为 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。
filetypes
中的值被解释为文件 extensions,而不是文件 patterns.
来自 official tcl/tk documentation(tkinter 是 tcl/tk 的薄包装):
The filePatternList value given by the -filetypes option is a list of file patterns. Each file pattern is a list of the form
typeName {extension ?extension ...?} ?{macType ?macType ...?}?
typeName is the name of the file type described by this file pattern and is the text string that appears in the File types listbox. extension is a file extension for this file pattern.
接着说:
Due to the different pattern matching rules on the various platforms, to ensure portability, wild card characters are not allowed in the extensions, except as in the special extension “*”. Extensions without a full stop character (e.g. “~”) are allowed but may not work on all platforms.