qt QSettings 类可用来保存软件设置,json文件也是保存软件设置的很好的方式.
这里结合json文件和QSettings注册表来保存软件设置.区别在于json文件在软件目录,每次更新时会被覆盖,注册表中设置持久有效,无需重新设置.
from PyQt5.QtCore import QDir, QFileInfo, QStandardPaths, Qt, QUrl,QSettings
import os
import json
import getpath
import sys
import logging
from collections import OrderedDict
_setting_file="setting.json"
setting={
}
path='HKEY_CURRENT_USER\\Software\\NCS_REPORT'
setting2 = QSettings(path, QSettings.NativeFormat)
# init_value=""
def write_setting():logging.info("write_setting=====================")# new_value=json.dumps(setting)# if new_value==init_value:# returnlogging.info("output")setting_filename = os.path.join(getpath.getpath(), _setting_file)# set_file=open(setting_filename, 'w',encoding="utf-8")# set_file.write(new_value)# set_file.close()set_file=open(setting_filename, 'w')json.dump(setting, set_file, indent=4)set_file.close()if sys.platform == "linux":passelse:#write to regsetting2.setValue("yqbh",setting["yqbh"])setting2.setValue("sblx",setting["sblx"])setting2.setValue("output_folder",setting["output_folder"])setting2.setValue("database",setting["database"])setting2.setValue("ejff_file",setting["ejff_file"])setting2.setValue("src_path",setting["src_path"])setting2.setValue("watch_path",setting["watch_path"])
def read_setting():global setting,init_valuebookmark_file_name = os.path.join(QDir.toNativeSeparators(_config_dir()),_setting_file)file=open(bookmark_file_name,encoding="utf-8")setting=json.load(file,object_pairs_hook=OrderedDict)file.close()if sys.platform == "linux":passelse:#read from regsetting["yqbh"]=setting2.value("yqbh")setting["sblx"]=setting2.value("sblx")setting["output_folder"]=setting2.value("output_folder")setting["database"]=setting2.value("database")setting["ejff_file"]=setting2.value("ejff_file")setting["src_path"]=setting2.value("src_path")setting["watch_path"]=setting2.value("watch_path")setting["syy"].sort()# init_value=json.dumps(setting)
def _config_dir():location =getpath.getpath()#QDir.currentPath()#QStandardPaths.writableLocation(QStandardPaths.ConfigLocation)logging.info("configdir"+location)return '%s' % location