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')
我正在尝试打开一个目录对话框,其中包含写入 .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')