在一种文件类型Mac中添加多个扩展名-tkinter / filedialog / askopenfilename

Joe*_*Joe 5 python macos filedialog tkinter

我试图用来tkinter filedialog在Mac中选择文件。

这种方式对一种文件类型可以正常工作:

filedialog.askopenfilename(filetypes=[("Excel files", "*.xlsx)])
Run Code Online (Sandbox Code Playgroud)

但是,我要选择xlsxxls文件。我搜索并找到了问题文件对话框,tkinter和打开文件。我使用类似的方式,但是如果我更改为Mac,则无法在Mac上使用:

filedialog.askopenfilename(filetypes=[("Excel files", "*.xlsx; *.xls")])

如何更改在文件对话框中选择xlsxxls文件?

mkl*_*nt0 10

看来您必须用空格而不是通配符模式;(在Python 3.5.1上验证):

from tkinter import filedialog

# add `, initialdir="..."` to set the initial directory shown in the dialog
filedialog.askopenfilename(filetypes=[("Excel files", ".xlsx .xls")])
Run Code Online (Sandbox Code Playgroud)

注意:

  • 尽管它"*.xlsx *.xls"也可以工作(至少在Windows和macOS上),但*不需要初始。[1]
  • 无论是.**.*作品(无过滤器)似乎是依赖于平台的; 在这种情况下,省略 filetypes是更好的选择。
  • 同样,匹配基本文件名部分的行为(如foo.txtfoo*.txt)似乎与平台有关:在Windows上,它们确实起作用,但带有前缀**foo.txt*foo*.txt),而在macOS上,它们似乎完全不匹配。

如果与平台相关的行为改为/也针对不同的tkinter版本,请告知我们。


[1] JakubBláha报告说"*.xlsx *.xls"在Windows 10版本1903上的Python 3.7.4中实际上对他不起作用(尽管我看不到相同的问题);为了安全起见,*如果不需要,请省略。

  • 是的,这有效。 (2认同)

小智 8

至少在 Windows 上,如果您希望能够打开多种文件类型但每次只能打开一种文件类型,那么您的代码必须如下所示:

filedialog.askopenfilename(filetypes=[("Excel file","*.xlsx"),("Excel file 97-2003","*.xls")])
Run Code Online (Sandbox Code Playgroud)

如果您希望能够同时选择两种文件类型而不在它们之间切换,则它们需要具有相同的名称。

filedialog.askopenfilename(filetypes=[("Excel file","*.xlsx"),("Excel file", "*.xls")])
Run Code Online (Sandbox Code Playgroud)