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文档,但找不到它。包装为什么会这样?有没有更好的选择来提取用户提示的文件路径的完整路径?
答案 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')))
这对我有用,祝你好运!