Независимо от того, что я делаю, tkinter.filedialog.askdirectory()
возвращает исходное значение по умолчанию (текущий каталог), когда кнопка Cancel
, или X
кнопка закрытия в окне, или если пользователь выбирает Esc
. Я пробовал кодировать опцию для начального каталога на C:\
, а не на E:\
, где сохраняется скрипт, чтобы попытаться контролировать это. Однако, если выбрано Cancel
, X
или Esc
, он все равно возвращает E:\
. Я также попытался добавить root.protocol
, чтобы X
закрыл всю программу, но это не повлияло на поведение. Я инициализировал каталог пустой строкой, что тоже не повлияло. Вся документация и вопросы / ответы, которые я нахожу, просто утверждают, что в этих случаях он должен возвращать пустую строку. Мне нужно, чтобы это было правдой! Я не вижу, что здесь не так; Спасибо заранее за любые советы. Единственный намек, который у меня есть, - я не уверен, как используются диалоги сообщений и файлов tkinter или, если они используют, окно root. Я думаю, что здесь я могу терять контроль ... ??
Я на 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:\