根据文档,如果用户单击“取消”,则应该返回一个空字符串,但是它没有这样做,我无法弄清楚它实际返回的内容。
我制作了这个小测试程序,其行为与我的实际项目相同:
from tkinter import *
from tkinter import filedialog
name = filedialog.askopenfilename()
if name == '':
print("Nothing chosen")
else:
print(name)
当用户点击取消时最终打印的是一对空括号()
用'(')替换''不会改变任何东西。
任何有助于弄清楚正在发生的事情的人都表示赞赏。谢谢。
更新:感谢@ PaulRooney的建议,但现在,我第一次运行这部分代码(在我的完整项目中),它返回空元组。对于每次后续运行,它都返回一个空字符串。
只需检查两件作品是否符合我的需要,但这是奇怪的行为。
我在Linux Mint上使用Python 3。
答案 0 :(得分:2)
如果名称可以正常使用。
from tkinter import *
from tkinter import filedialog
name = filedialog.askopenfilename()
if name:
print(name)
else:
print("Nothing chosen")
答案 1 :(得分:0)
嗯......请确保您使用的是Python 3,因为这不适用于Python 2 当我将括号更改为“”(我在Python 2上)
时,它对我有用答案 2 :(得分:0)
直到我回答了一个年长但相似的question之后,我才看到这篇文章!
基本上,点击取消将返回一个空字符串...
除非您先实际选择/突出显示文件,然后单击取消。
这似乎返回一个空元组!!!
(我没有尝试初始化和初始文件选项,但我猜他们也会导致返回一个空元组...至少最初?)
使用python 2.6.6(IDK,问RedHat)
运行以下代码会生成后续结果
f_picked = tkFileDialog.askopenfilename()
test = type(f_picked)
print (test)
结果:
<type 'unicode'>
#未选择任何内容,取消点击了
<type 'tuple'>
#文件已选中,取消点击了
<type 'str'>
#文件已选中,确定点击了
<type 'tuple'>
#选择了多个文件,确定点击了
答案 3 :(得分:0)
我有一个File -> Open
菜单项,显示askopenfilename对话框。我发现使用python 2.7
和3.6
,第一次,我使用对话框并选择Cancel
或从窗口边框关闭对话框,它返回一个空元组,而不是''
。此后每次对话框在''
或关闭窗口时返回Cancel
。
也许这是某种功能,但感觉像是个错误,尤其是对于这种不支持选择多个文件的对话。一个空的元组从askopenfilenames中是有意义的。
我已经完成了这个简单的测试和清理工作,以解决AskopenFileName对话框返回的文件名:
if str(filename) == '()':
filename = ''