9

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

3 回答 3

8

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

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

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

于 2013-02-21T23:07:38.090 回答
6

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

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

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

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

于 2017-11-22T14:20:46.657 回答
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
于 2021-06-21T01:32:20.503 回答