qt QSettings 类可用来保存软件设置,json文件也是保存软件设置的很好的方式.
这里结合json文件和QSettings注册表来保存软件设置.区别在于json文件在软件目录,每次更新时会被覆盖,注册表中设置持久有效,无需重新设置.使用时只针对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:
# return
logging.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":
pass
else:#write to reg
setting2.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_value
bookmark_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":
pass
else:#read from reg
setting["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