为什么asksaveasfilename不返回文件类型?

时间:2018-07-06 16:42:04

标签: python python-3.x tkinter openfiledialog filedialog

Tkinter是一个很好的软件包,filedialog具有一些非常有用的功能。 askopenfilename和asksaveasfilename都具有'filetypes'属性,但每个属性的工作方式都不同。

使用askopenfilename,它在GUI中提供选项并返回文件类型BUT

使用asksaveasfilename时,它仅在GUI中提供选项,而不返回文件类型。示例代码如下所示:

import tkinter as tk 
from tkinter import filedialog 


old_file_name = filedialog.askopenfilename(title = "Choose file",filetypes=\
                                       (('All files','*.*'),\
                                        ('tagData','*.tagData'),\
                                        ('FDAX files','*.fdax'),\
                                        ('CSV files','*.csv')))

new_file_name = filedialog.asksaveasfilename(initialdir = "/",filetypes=\
                                         (('tagData','*.tagData'),\
                                          ('FDAX files','*.fdax'),\
                                          ('CSV files','*.csv'),\
                                          ('XLS files','*.xls')))

print(old_file_name)
print(new_file_name)

输出:

 C:/Users/christian.abbott/Desktop/FDAX_Error/example.csv
 C:/Users/christian.abbott/Desktop/example

我一直在寻找好的filedialog文档,但找不到它。包装为什么会这样?有没有更好的选择来提取用户提示的文件路径的完整路径?

2 个答案:

答案 0 :(得分:0)

这与tkinter无关。 Windows文件资源管理器默认情况下对您隐藏文件扩展名。因此,当您在文件资源管理器中看到“示例”文件时,Windows对您说谎。 actual 文件名是“ example.csv”。大多数程序(包括python)不会说谎,并向您显示实际文件名。

为输入文件名,tkinter使用OS文件选择小部件并仅显示其返回的内容。我用Win7进行了测试,但它不包含扩展名。但是在Debian Jessie中确实如此。如果不是这样,您总是可以添加一些代码来为用户执行此操作:

if not new_file_name.endswith(('tagData','fdax','csv','xls')):
    new_file_name += '.csv'

在开始菜单中搜索“显示扩展名”,然后可以关闭此“功能”。

答案 1 :(得分:0)

在Windows 10上,我在Python 3上也遇到了同样的问题。我设法通过在文件类型元组中的句号前删除*来解决了这个问题。希望可以进行以下更改:

  new_file_name = filedialog.asksaveasfilename(initialdir = "/",filetypes=\
                                     (('tagData','.tagData'),\
                                      ('FDAX files','.fdax'),\
                                      ('CSV files','.csv'),\
                                      ('XLS files','.xls')))

这对我有用,祝你好运!