在Tkinter / Python中使用askopenfilename打开KNOWNFOLDERID

问题描述 投票:0回答:2

我想将我的初始目录设置为 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()
python windows tkinter filepath
2个回答
1
投票

如果您只需要用户的目录,可以使用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')

0
投票

在 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)的路径,这将完全回答这个问题。如果我能做到,我会更新此回复。

© www.soinside.com 2019 - 2024. All rights reserved.