askopenfilename处理取消对话

BAI*_*BAI 5 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))
Run Code Online (Sandbox Code Playgroud)

小智 6

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

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

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

f_picked = tkFileDialog.askopenfilename() test = type(f_picked) print (test)
结果:
<type 'unicode'>#没有选中,取消单击
<type 'tuple'>选择文件#,取消单击
<type 'str'>选择文件#,OK点击
<type 'tuple'>#多个文件选择,OK点击


小智 5

.askopenfilename()在取消时返回空字符串,而不是None.所以你可以比较''False.为了获得代码示例:

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

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