我想将我的初始目录设置为 KNOWNFOLDERID,例如文档或桌面。 这可能吗? 我尝试这样做,但它打开了我的 python 项目的目录。
from tkinter import *
from tkinter import filedialog
root = Tk()
root.filename = filedialog.askopenfilename(
initialdir="%USERPROFILE%/Documents",
title="get a file",
filetypes=((".jpg files", "*.jpg"), (".png files", "*.png"))
)
root.mainloop()
如果您只需要用户的目录,可以使用pathlib的
home
。
要获取文档文件夹的路径,请使用
from pathlib import Path
docs_folder = Path.home() / "Documents"
这适用于 Windows 和基于 Unix 的操作系统。
或者您可以使用 os.path 中的
expandvars
import os
docs_folder = os.path.join(os.path.expandvars('%USERPROFILE%'),'Documents')
在 Windows 中,使用
pathlib中的
Path.home()
,您将获得环境字符串 %USERPROFILE%
,但 Documents 文件夹的路径可能不是 %USERPROFILE%\Documents
,因为其位置可由用户编辑。
如果 KnownFolderID 具有等效的 CLSID,您可以将 SHGetFolderPathW 函数与 ctypes 库结合使用。 例如,要获取 Documents 文件夹路径:
import ctypes
ptr = ctypes.create_unicode_buffer(260)
ctypes.windll.shell32.SHGetFolderPathW(None, 5, None, 0, ptr)
folder_path = ptr.value
第二个参数是 CLSID enum。例如,文档 = 5、桌面 = 16、用户配置文件 = 40。 第三个参数是您想要文件夹当前路径(0)还是文件夹默认路径(1)。
使用ctypes,还应该可以检索定义结构的其他KnownFolderID(那些没有等效的clsid)的路径,这将完全回答这个问题。如果我能做到,我会更新此回复。