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

问题描述 投票:0回答:1

我在一些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行为不同。

python tkinter tcl tk
1个回答
1
投票

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

如果您确实需要文件类型选择,请使用脚本实现的对话框版本;它们是跨平台的(在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上看起来或感觉原生,但它至少应该工作......

© www.soinside.com 2019 - 2024. All rights reserved.