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:\
,以尝试控制它。但是,如果选择Cancel
、X
或Esc
,它仍然是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""
.
无论我做什么,tkinter.filedialog.askdirectory()
return 都是 Cancel
按钮或 X
关闭按钮时的初始默认值(当前目录)window,或者如果用户选择 Esc
。我尝试将初始目录的选项编码为 C:\
,而不是保存脚本的 E:\
,以尝试控制它。但是,如果选择Cancel
、X
或Esc
,它仍然是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""
.