PyQt5不会将设置保存到ini文件

时间:2018-08-29 11:23:18

标签: python python-3.x pyqt pyqt5 qsettings

对于一个应用程序,我需要在.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文件中。所以,我想我在这里缺少什么?

1 个答案:

答案 0 :(得分:1)

您必须调用sync()方法,以便保存值:

...

for k, v in inidict.items():
    settings.setValue(k, v)

settings.sync() # <---

以上内容已在文档中明确指出:

  

void QSettings::sync()

     

将所有未保存的更改写入永久存储,并重新加载任何   同时已被其他设置更改的设置   应用。

     

此函数从QSettings的析构函数自动调用,并且   通过事件循环定期进行,因此您通常不需要   自己叫。

在前面的内容中,它指示此方法负责保持更改,并且如果使用某些QXXXAplication.exec_()存在事件循环,则在析构函数中调用该方法,但是在您的情况下,没有该方法,因此您必须明确地调用它。