Python tkinter,tkinter.askdirectory() returns 用户点击 'cancel' 或 X out,或 Esc window 时的初始默认目录

Python tkinter, tkinter.askdirectory() returns the initial default directory when user hits 'cancel' or X out, or Esc the window

无论我做什么,tkinter.filedialog.askdirectory() return 都是 Cancel 按钮或 X 关闭按钮时的初始默认值(当前目录)window,或者如果用户选择 Esc。我尝试将初始目录的选项编码为 C:\,而不是保存脚本的 E:\,以尝试控制它。但是,如果选择CancelXEsc,它仍然是returns E:\。我还尝试添加 root.protocol 以强制 X 关闭整个程序,但它并没有改变行为。我用一个空字符串初始化了目录,这也没有效果。我发现的所有文档和 question/answers 都简单地声明在这些情况下它应该 return 一个空字符串。我需要这是真的!我看不出这里有什么问题;提前感谢您的任何建议。我唯一的提示是我不确定 tkinter 消息和文件对话框如何使用,或者如果它们使用根 window。我认为这是我可能会失去控制的地方...??

我在 Windows 10,使用 Python 3.7.0.

这是我所拥有的玩具示例:

import os
import tkinter
import tkinter.filedialog as tkf

class Directory(tkinter.Tk):
    def __init__(self):
            
        self.root = tkinter.Tk()
        self.root.protocol("WM_DELETE_WINDOW", self.root.quit())
        self.root.withdraw()

        self.directory = ""
        
       
    def GetDirectory(self):
        self.directory = os.path.abspath(tkf.askdirectory(master = self.root, initialdir = 'C:\', title = "Select your Source directory")) 
        print('type directory', type(self.directory), self.directory=="", self.directory)
      
        return self.directory

if __name__ == "__main__":
    app = Directory()
    Directory.GetDirectory(app)

Output after hitting cancel, Esc, or X:

type directory <class 'str'> False E:\

问题的原因是您在 askdirectory 中添加了 os.path.abspath()

os.path.abspath():Return a normalized absolutized version of the pathname path

即使当您取消或按“X”时它会return"",但是os.path.abspath("")会return当前文件夹的绝对路径。

self.directory = tkf.askdirectory(master=self.root, initialdir='C:\', title="Select your Source directory")

这只是return你的文件夹的绝对路径select.And当你select什么都没有的时候,它会return"".