如果我在filetypes
asksaveasfilename
中使用多于1个点,则返回没有任何文件类型的名称。
import tkinter as tk
root = tk.Tk()
file_name = tk.filedialog.asksaveasfilename(
filetypes= [("two dots", ".zz.zz"), ("one dot", ".zz") ])
print(file_name)
示例:
"two dots"
扩展名,如果我在文件名框中输入hello
,则会返回hello
作为名称,而不是hello.zz.zz
"one dot"
扩展名,如果我在文件名框中输入hello
,则会正确返回hello.zz
。这有明显的原因吗?这是一个错误吗?
要明确我不要求解决方法......因为这在这里很容易做到。我只想问为什么会这样。
我已经尝试过defaultextension
。无论我放在那里,它都会完全接管filetypes
。我的意思是,它会重写我选择的任何文件类型。例如,如果我选择defaultextension = ".x"
或.x
格式,.zz
将返回.zz.zz
格式,除非我自己写出扩展名,从而消除了从中选择文件类型的全部要点菜单。顺便说一句,我在Linux(Mint)上。
答案 0 :(得分:1)
问题不在于有两个点,问题是你在点之后有一个“非单词字符”。例如,如果使用模式“.zz @”或“。#hash”
,您将看到相同的行为过滤器是一种搜索机制,不一定用于设置扩展名。也许它应该用于设置扩展,但事实并非如此。该对话框旨在为您提供默认扩展名。如果不这样做,则行为是特定于平台的。 dplyr
选项的规范文档说明了这一点(强调添加):
如果用户输入没有扩展名的文件名,则指定将附加到文件名的字符串。默认值为空字符串,这意味着在任何情况下都不会将扩展名附加到文件名。在Mac OS X上忽略此选项,它不需要扩展文件名,并且 UNIX实现在未提供此文件的情况下从-filetypes选项猜测合理的值。
不幸的是,这个“猜测”并不处理第一个点后面有非单词字符的情况。它真的很简单。 Tkinter(或者更准确地说,底层的tk库)只有在匹配点后跟字母,数字或下划线时才会使用该模式。
答案 1 :(得分:0)
对于涉及文件系统的问题,请包含操作系统,因为这会影响详细信息。在Windows 10上,我没有添加任何扩展名。也许您正在使用Linux。对于Mac,您应该添加Mac文件类型。请参阅tk doc。
您省略了'defaultextension'参数。值''表示'添加延伸。在Mac上,''是不允许的,必须选择一些非空的默认值。以下内容适用于我添加任一扩展名。
import tkinter as tk
from tkinter import filedialog
root = tk.Tk()
file_name = filedialog.asksaveasfilename(
filetypes= (("two dots", ".zz.zz"), ("one dot", ".zz")),
defaultextension='')
print(file_name)
请注意你的单行太少了。见MCVE help