askopenfilename处理对话取消



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

相关内容

  • 没有找到相关文章

最新更新