【问题标题】:Add multiple extensions in one filetypes mac - tkinter/filedialog/askopenfilename在一种文件类型中添加多个扩展名 mac - tkinter/filedialog/askopenfilename
【发布时间】:2017-11-08 06:29:54
【问题描述】:

我正在尝试使用tkinter.filedialog 在 Mac 中选择文件。

以这种方式适用于一种文件类型:

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

但是,我想选择 xlsxxls 文件。我搜索并发现了一个问题filedialog, tkinter and opening files。我使用类似的方式,但如果我改为这样,它不适用于 Mac:

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

我应该如何更改以在文件对话框中选择xlsxxls 文件?

【问题讨论】:

    标签: python macos tkinter filedialog


    【解决方案1】:

    您似乎必须用 空格 分隔通配符模式,而不是 ;(在 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")])
    

    注意:

    • 虽然 "*.xlsx *.xls" 也可以工作(至少在 Windows 和 macOS 上),但初始的 * 不是必需的。[1]
    • .**.* 是否有效(无过滤器)似乎取决于平台; 省略 filetypes 在这种情况下是更好的选择。
    • 类似地,匹配 base 文件名的一部分的行为 - 例如foo.txtfoo*.txt - 似乎与平台相关:在 Windows 上,这些确实有效,前面带有 @ 987654331@(*foo.txt*foo*.txt),而在 macOS 上它们似乎不匹配。

    如果平台相关的行为改为/也链接到不同的 tkinter 版本,请告诉我们。


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

    【讨论】:

      【解决方案2】:

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

      filedialog.askopenfilename(filetypes=[("Excel file","*.xlsx"),("Excel file 97-2003","*.xls")])
      

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

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

      【讨论】:

        【解决方案3】:

        Windows 10 上的多个扩展对我来说就像这样。例如搜索python文件。

        py_exts = r"*.py  *.py3 *.pyc  *.pyo  *.pyw  *.pyx  *.pyd  *.pxd  *.pyi  *.pyi  *.pyz  *.pywz *.rpy  *.pyde *.pyp  *.pyt  *.xpy  *.ipynb"  
        
        filename = filedialog.askopenfilename(initialdir=SEEN,
                                                      title="Select a File",
                                                      filetypes=(("video files",
                                                                  video_exts),
                                                                 ("python files", py_exts),
                                                                 ("all files",
                                                                  "*.*")))
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2018-01-14
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-04-09
          • 1970-01-01
          相关资源
          最近更新 更多