TkFileDialog在OSX10.12.6上不显示文件扩展名选项

时间:2018-09-11 18:42:33

标签: python tkinter tcl tk

我在某些python代码中使用Tkinter的tkFileDialog包。以下命令提示用户选择能够在“ csv”或“ any”之间更改文件类型的文件。

tkFileDialog.askopenfilename(filetypes=[('csv files', '*.csv'), ('all 
    files', '*.*')],)

在Windows 10上,这可以按预期工作,但在OSX10.12.6上,文件类型下拉列表不可用。它仅允许选择csv文件,没有选择更改文件类型的选项。我该如何使其正常工作?我唯一的想法是OSX上的tcl 8.6与Windows上的tcl 8.5的行为有所不同。

1 个答案:

答案 0 :(得分:1)

是的。 OSX上的实际本机文件对话框不支持文件类型选择。少数应用程序对其进行了增强,以增加该功能,但是Tk却没有像许多其他应用程序那样进行增强。 这是因为操作系统样式指南指定不这样做。

如果您确实需要选择文件类型,请使用脚本的对话框版本;它们是跨平台的(以及在Unix / X11平台上始终使用的平台)。不幸的是,它们并没有专门映射到Python调用。您将需要使用原始调用界面。 (有关.tk.eval方法的作用,请参见How to Call TCL Procedure using Python;虽然没有充分的文档说明,但这正是您所需要的。)

# Root context object
root = tkinter.Tk()

# The filetypes *IN TCL FORMAT*
filetypes = "{{csv files} *.csv} {{all files} *}"

# The actual call; note that that that's a very unusual command name by Tcl standards!
# 
filename = root.tk.eval('::tk::dialog::file:: open -filetypes {' + filetypes + '}')

# Fix up the result; empty string means "no file selected"
if filename == "":
    filename = None

对不起,这很混乱,在OSX上它看起来绝对不是本机,但至少应该可以工作……