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

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

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

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

使用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

我已经找了很好的文件归档文件,但一直找不到它。为什么包的行为如此?是否有更好的选项来提取用户提示的文件路径的完整路径?

python python-3.x tkinter openfiledialog filedialog
2个回答
0
投票

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

为了输入文件名,tkinter使用操作系统文件选择小部件,只显示它返回的内容。我用Win7测试了它,它不包括扩展名;然而在Debian Jessie中确实如此。如果没有,您可以随时添加一些代码来为用户执行此操作:

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

在开始菜单中搜索“show extensions”,您可以关闭此“功能”。


0
投票

我在Windows 10上遇到了与Python 3相同的问题。我设法通过删除文件类型元组中的句点之前的*来解决它。希望以下更改可以满足您的需求:

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

这对我有用,祝你好运!

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