python - 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 文件中。所以,我想我在这里遗漏了什么?
解决方案
您必须调用该sync()
方法才能保存值:
...
for k, v in inidict.items():
settings.setValue(k, v)
settings.sync() # <---
以上内容在文档中明确指出:
将任何未保存的更改写入永久存储,并重新加载同时由另一个应用程序更改的任何设置。
这个函数是由 QSettings 的析构函数和事件循环定期自动调用的,所以你通常不需要自己调用它。
在前面的事情中,它表明此方法负责保持更改,并且如果使用 some 存在事件循环QXXXAplication.exec_()
,则在析构函数中调用它,但在您的情况下没有它,因此您必须显式调用它。
推荐阅读
- python - python中dict的弹性seacrh查询
- javascript - 正则表达式删除文件名中的特殊字符,扩展名除外
- json - 如何将 JSON 对象键值对分别绑定到角度模板
- wso2 - 如何在 WSO2 身份服务器电子邮件模板中添加新语言
- php - 检查一个数组中某个键的值是否等于另一个数组中不同键的值
- angular5 - primeng 编辑器源代码在 Angular 5 中不起作用
- sql - 带条件的 SQL SUM 组
- node-red - Node-Red 比较新值和以前的值
- c++ - 使用算法头查找自定义数据类型的最小值
- tabulator - 制表器 - 下载和重用更改