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 文件的主要内容,如果未能解决你的问题,请参考以下文章

将 INI 文件中的值加载到组合框

如何使用 PyQt5 保存任何文件?

csharp 在INI文件中保存设置

PySide/PyQt5 QSettings 未保存到 HKEY_LOCAL_MACHINE

如何保存编辑的 PyQt5 TableWidget 单元格?

通过Pyqt5 python保存文件[重复]