TkFileDialog 在 OSX10.12.6 上不显示文件扩展名选项
TkFileDialog does not show File Extension options on OSX10.12.6
我在一些 python 代码中使用了 Tkinter 的 tkFileDialog 包。以下命令提示用户 select 一个文件,该文件能够在 "csv" 或 "any" 之间更改文件类型。
tkFileDialog.askopenfilename(filetypes=[('csv files', '*.csv'), ('all
files', '*.*')],)
在 Windows 10 上,这按预期工作,但在 OSX10.12.6 上,文件类型下拉列表不可用。它只允许 selection 个 csv 文件,没有更改文件类型的选项。我怎样才能让它正常工作?我唯一的想法是 OSX 上的 tcl 8.6 与 windows 上的 tcl 8.5 表现不同。
没错。 OSX 上的实际本机文件对话框不支持文件类型选择。少数应用程序增强了它以添加该功能,但 Tk 没有,就像许多其他应用程序一样。 这是因为 OS 风格指南指定不这样做。
如果您确实需要选择文件类型,请使用对话框的脚本实现版本;它们是跨平台的(以及 Unix/X11 平台上始终使用的内容)。不幸的是,它们并没有专门映射到 Python 调用;您需要使用原始调用接口。 (请参阅 How to Call TCL Procedure using Python 以了解 .tk.eval
方法的作用;它没有很好的文档记录,但它正是您所需要的。)
# 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 上看起来或感觉起来肯定不是原生的,但它至少应该可以工作……
我在一些 python 代码中使用了 Tkinter 的 tkFileDialog 包。以下命令提示用户 select 一个文件,该文件能够在 "csv" 或 "any" 之间更改文件类型。
tkFileDialog.askopenfilename(filetypes=[('csv files', '*.csv'), ('all
files', '*.*')],)
在 Windows 10 上,这按预期工作,但在 OSX10.12.6 上,文件类型下拉列表不可用。它只允许 selection 个 csv 文件,没有更改文件类型的选项。我怎样才能让它正常工作?我唯一的想法是 OSX 上的 tcl 8.6 与 windows 上的 tcl 8.5 表现不同。
没错。 OSX 上的实际本机文件对话框不支持文件类型选择。少数应用程序增强了它以添加该功能,但 Tk 没有,就像许多其他应用程序一样。 这是因为 OS 风格指南指定不这样做。
如果您确实需要选择文件类型,请使用对话框的脚本实现版本;它们是跨平台的(以及 Unix/X11 平台上始终使用的内容)。不幸的是,它们并没有专门映射到 Python 调用;您需要使用原始调用接口。 (请参阅 How to Call TCL Procedure using Python 以了解 .tk.eval
方法的作用;它没有很好的文档记录,但它正是您所需要的。)
# 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 上看起来或感觉起来肯定不是原生的,但它至少应该可以工作……