处理askopenfilename对话框中的取消操作
我有一个图形界面,当用户按下一个按钮时,会打开一个文件选择对话框(askopenfilename)。不过,我想处理用户在这个对话框中选择“取消”的情况。
这是我用来处理按钮点击的函数,但里面的if语句似乎没有起作用!
def openFileClicked(self):
self.filename=filedialog.askopenfilename()
if self.filename== None:
self.e.config(state= NORMAL)
self.e.delete(0,END)
self.e.insert(0,"...")
self.e.config(state="readonly")
self.e.config(state= NORMAL)
self.e.delete(0,END)
self.e.insert(0, self.filename)
self.e.config(state="readonly")
print ((self.filename))
4 个回答
0
你可以考虑用户选择取消的情况,如下所示:
def openFileClicked(self):
self.filename = filedialog.askopenfilename()
# When user select cancel
if (len(self.filename) == 0):
# put your code here in case the user selected cancel
# Otherwise the user selected a file
else:
# put your code here in case the user selected a file
6
我知道这已经过了好几年,但我发现了一个相关的小问题,找不到任何信息。希望这些信息对看到这个答案的人有用。
简单来说,正如所说的,点击取消会返回一个空字符串……
但如果你先选择/高亮一个文件,然后再点击取消,这时候返回的却是一个空元组!!!
我使用的是python 2.6.6(我也不知道,问问RedHat吧)
运行以下代码会产生相应的结果:
f_picked = tkFileDialog.askopenfilename()
test = type(f_picked)
print (test)
结果是:
<type 'unicode'>
# 没有选择任何东西,点击了取消
<type 'tuple'>
# 选择了文件,点击了取消
<type 'str'>
# 选择了文件,点击了确定
<type 'tuple'>
# 选择了多个文件,点击了确定
10
.askopenfilename()
在你点击取消时会返回一个空字符串,而不是返回 None。所以你可以把它和 ''
或 False
进行比较。为了给你一个代码示例:
def openFileClicked(self):
self.filename = filedialog.askopenfilename()
if not self.filename:
# config...delete...etc.
# Rest of function
至少这是我会这样做的,你可以有自己的偏好。