【问题标题】:TkFileDialog does not show File Extension options on OSX10.12.6TkFileDialog 在 OSX10.12.6 上不显示文件扩展名选项
【发布时间】:2018-09-11 18:42:32
【问题描述】:

我在一些 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】:

    没错。 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 上绝对不会看起来或感觉是原生的,但它至少应该可以工作......

    【讨论】:

      猜你喜欢
      • 2015-01-20
      • 2021-03-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-14
      • 1970-01-01
      相关资源
      最近更新 更多