PyQt5 不会将设置保存到 ini 文件
Posted
技术标签:
【中文标题】PyQt5 不会将设置保存到 ini 文件【英文标题】:PyQt5 doesn't save settings to ini files 【发布时间】:2018-08-29 11:23:18 【问题描述】:对于应用程序,我需要读取/写入 .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】:您必须调用sync()
方法才能保存值:
...
for k, v in inidict.items():
settings.setValue(k, v)
settings.sync() # <---
以上在文档中明确指出:
void QSettings::sync()
将任何未保存的更改写入永久存储,并重新加载任何 同时被其他人更改的设置 应用。
这个函数是从 QSettings 的析构函数中自动调用的,并且 定期通过事件循环,所以你通常不需要 自己叫吧。。
在前面的事情中,它表明此方法负责保持更改,并且如果使用一些 QXXXAplication.exec_()
存在事件循环,则在析构函数中调用它,但在你的情况下没有它,所以你必须显式调用它。
【讨论】:
非常感谢,我没有仔细阅读那部分!我发现了很多没有使用同步的例子——现在我猜这些例子中有事件循环。现在清楚多了!以上是关于PyQt5 不会将设置保存到 ini 文件的主要内容,如果未能解决你的问题,请参考以下文章
PySide/PyQt5 QSettings 未保存到 HKEY_LOCAL_MACHINE