我有一个gui,当按下按钮时,它会初始化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))
.askopenfilename()
在取消时返回一个空字符串,而不是None。因此,您可以与''
或False
进行比较。为了有一个代码样本:
def openFileClicked(self):
self.filename = filedialog.askopenfilename()
if not self.filename:
# config...delete...etc.
# Rest of function
至少我会这么做,你可能有自己的偏好。
我知道这是几年后的事了,但我发现了一个相关的怪癖,找不到任何信息。希望这些信息对任何遇到这个答案的人都有用。
基本上,如前所述,单击取消将返回一个空字符串。。。除非您实际先选择/高亮显示一个文件,然后单击"取消"。这似乎返回了一个空元组!!!
使用python 2.6.6(IDK,询问RedHat)
运行以下代码会产生后续结果
f_picked = tkFileDialog.askopenfilename()
test = type(f_picked)
print (test)
结果:<type 'unicode'>
#未选择任何内容,单击取消
已选择<type 'tuple'>
#文件,单击"取消"<type 'str'>
#已选择文件,单击"确定"<type 'tuple'>
#选择多个文件,OK点击
您可以考虑用户选择取消,如下所示:
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
如果使用initialdir参数,则检查空字符串将不起作用,因为cancel仍会将值Path('.')
分配给变量。我能想到的最好的办法就是一直询问,直到他们选择了一个地点。不幸的是,这会使它们陷入循环,所以如果这比用错误的位置继续代码要好的话,请使用您的最佳判断。
while folder == Path('.'):
folder = Path(askdirectory(title='Select Folder', initialdir='.'))