对于一个应用程序,我需要在.ini文件中读取/写入值。我在Windows7上将python3与pyqt5一起使用,并得到了这个小例子:
import os
from PyQt5.QtCore import QSettings
ini_str = """[mysection]
key0=value0
"""
with open("test.ini", "w") as fi:
fi.write(ini_str)
inidict = {
"mysection/key1" : "value1",
"myothersection/key2" : "value2"
}
settings = QSettings("test.ini", QSettings.IniFormat)
for k in settings.allKeys():
print(k, settings.value(k))
for k in inidict.keys():
settings.setValue(k, inidict[k])
从我的ini文件中读取值是可行的,但是设置值(如第二个for循环中的设置)不起作用,值不会保存到ini文件中。所以,我想我在这里缺少什么?
答案 0 :(得分:1)
您必须调用sync()
方法,以便保存值:
...
for k, v in inidict.items():
settings.setValue(k, v)
settings.sync() # <---
以上内容已在文档中明确指出:
将所有未保存的更改写入永久存储,并重新加载任何 同时已被其他设置更改的设置 应用。
此函数从QSettings的析构函数自动调用,并且 通过事件循环定期进行,因此您通常不需要 自己叫。
在前面的内容中,它指示此方法负责保持更改,并且如果使用某些QXXXAplication.exec_()
存在事件循环,则在析构函数中调用该方法,但是在您的情况下,没有该方法,因此您必须明确地调用它。