首页 > 解决方案 > PyQt5 不会将设置保存到 ini 文件

问题描述

对于应用程序,我需要读取/写入 .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 文件中。所以,我想我在这里遗漏了什么?

标签: pythonpython-3.xpyqtpyqt5qsettings

解决方案


您必须调用该sync()方法才能保存值:

...

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

settings.sync() # <---

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

无效 QSettings::sync()

将任何未保存的更改写入永久存储,并重新加载同时由另一个应用程序更改的任何设置。

这个函数是由 QSettings 的析构函数和事件循环定期自动调用的,所以你通常不需要自己调用它。

在前面的事情中,它表明此方法负责保持更改,并且如果使用 some 存在事件循环QXXXAplication.exec_(),则在析构函数中调用它,但在您的情况下没有它,因此您必须显式调用它。


推荐阅读