askopenfilename处理取消对话

时间:2013-02-21 19:17:44

标签: python user-interface

我有一个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))

3 个答案:

答案 0 :(得分:5)

.askopenfilename()在取消时返回空字符串,而不是None。因此,您可以与''False进行比较。为了获得代码示例:

def openFileClicked(self):
    self.filename = filedialog.askopenfilename()
    if not self.filename:
        # config...delete...etc.
    # Rest of function

至少我是这样做的,你可能有自己的喜好。

答案 1 :(得分:2)

我知道这是几年后,但我发现了一个相关的怪癖,找不到任何信息。希望这些信息对遇到这个答案的人有用。

基本上,如上所述,点击取消将返回一个空字符串... 除非您先实际选择/突出显示文件,然后单击取消。 这似乎返回一个空元组!!!

使用python 2.6.6(IDK,问RedHat)
运行以下代码会生成后续结果

f_picked = tkFileDialog.askopenfilename() test = type(f_picked) print (test)
结果:
<type 'unicode'>#未选择任何内容,取消点击了 <type 'tuple'>#文件已选中,取消点击了 <type 'str'>#文件已选中,确定点击了 <type 'tuple'>#选择了多个文件,确定点击了

答案 2 :(得分: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