QFileDialog.getExistingDirectory() 是否识别 %USERNAME%?

Does QFileDialog.getExistingDirectory() recognize %USERNAME%?

我正在尝试打开一个目录对话框,其中包含写入 .ini 文件的默认目录。

.ini 文件如下所示:

defaultWorkingDirectory = "%%USERPROFILE%%\Documents\CAD\Working_Directory"

我写了一个函数来打开目录对话框:

from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
import sys
from os.path import expanduser
import configparser
import itertools
import re

self.home = expanduser("~")
self.defaultPath = self.home + "\Documents\OptCAD\Working_Directory"

def openDirectoryDialog(self):
    cfg = configparser.ConfigParser()
    cfg.read_file(itertools.chain(['[global]'], open('C:\Program Files (x86)\CAD\config.ini')))
    print(cfg.items('global')) # It returns : [('defaultworkingdirectory', '"%USERPROFILE%\Documents\OptCAD\Working_Directory"')]

    cfgList = cfg.items('global')
    wDirTuple = cfgList[(0)]
    _, workingDir = wDirTuple

    print(workingDir) # It returns : "%USERPROFILE%\Documents\OptCAD\Working_Directory"

    self.directoryName = str(QFileDialog.getExistingDirectory(self, "Select Working Directory", workingDir, QFileDialog.ShowDirsOnly))

然后当我打开目录对话框时,默认目录不是好的目录。

你总是可以使用expanduser获取用户配置文件路径,%USERPROFILE%有什么需要?您可以将相对路径存储在您的案例 Documents\OptCAD\Working_Directory 的配置文件中,然后以与在变量 relativeWorkingDir 中相同的方式读取它。最后像这样将它与用户配置文件结合起来。

workingDir = os.path.join(os.path.expanduser('~'), relativeWorkingDir)

我假设您要做的是从您无法控制的程序的配置文件中读取值。

%USERPROFILE% 语法是 windows 引用环境变量的特定方式。它不会被 Python 或 Qt 自动扩展,所以你必须自己做:

import os

userprofile = os.environ.get('USERPROFILE')
workingdir = cfg.get('global', 'defaultworkingdirectory', fallback=None)

if workingdir and userprofile:
    workingdir = workingdir.replace('%USERPROFILE%', userprofile)
else:
    workingdir = os.exanduser('~\Documents\OptCAD\Working_Directory')