Tkinter打开文件窗口,文件扩展名大小写敏感问题

4

我正在为我的一个脚本尝试使用tkinter,但是在使用askopenfilename()方法的filetypes参数时遇到了问题。

INFILE = askopenfilename(filetypes = (("TEST files", "*.test"), ("all files", "*.*")))

这个功能已经可以正常工作,但是过滤器区分大小写,有没有办法让它不区分大小写呢? 我想要查看所有扩展名为.test的文件,无论大小写如何(例如:.teSt .TEST .test)。 我相信我不需要手动编写每个组合,如果你有任何想法,请告诉我。
1个回答

4

没有内置选项可以这样做,但是你可以将区分大小写的扩展名保存在列表中,然后引用它:

from tkinter import filedialog
from tkinter import *


text_file_extensions = ['*.txt', '*.txT', '*.tXT',  '*.Txt', '*.TXt', '*.TXT', '*.tXt',
                        '*.TxT']
ftypes = [
    ('test files', text_file_extensions),
    ('All files', '*'),
]

root = Tk()
root.filename = filedialog.askopenfilename(initialdir="/", title="Select file",
                                           filetypes=ftypes)
print(root.filename)

演示:

在此输入图片描述

注:以上内容涉及IT技术,仅供参考。


1
哦,有点遗憾没有内置的解决方案,我会采用你的,谢谢 :) (幸运的是我的扩展名只有两个字母长) - Plopp
值得注意的是,在不区分大小写(但保留大小写)的文件系统上,比如Windows,不必列出所有可能的字母大小写变化——只需使用“text_file_extensions = ['*.txt']”即可列出任何三个字母大小写变化的文件。 - martineau
2
你可以通过算法生成所有字母大小写变化,方法是 chars = ((char.lower(), char.upper()) for char in 'abc'),然后 ftypes = ['*.'+''.join(letters) for letters in itertools.product(*chars)] - martineau
好的,谢谢 @martineau - Billal Begueradj

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接