处理askopenfilename对话框中的取消操作

10 投票
4 回答
22100 浏览
提问于 2025-04-17 16:40

我有一个图形界面,当用户按下一个按钮时,会打开一个文件选择对话框(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

至少这是我会这样做的,你可以有自己的偏好。

撰写回答