【问题标题】:PyQt5 doesn't save settings to ini filesPyQt5 不会将设置保存到 ini 文件
【发布时间】: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 文件中。所以,我想我在这里遗漏了什么?

【问题讨论】:

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


    【解决方案1】:

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

    ...
    
    for k, v in inidict.items():
        settings.setValue(k, v)
    
    settings.sync() # <---
    

    以上在文档中明确指出:

    void QSettings::sync()

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

    这个函数是从 QSettings 的析构函数中自动调用的,并且 定期通过事件循环,所以你通常不需要 自己叫吧。。

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

    【讨论】:

    • 非常感谢,我没有仔细阅读那部分!我发现了很多没有使用同步的例子——现在我猜这些例子中有事件循环。现在清楚多了!
    猜你喜欢
    • 2016-01-25
    • 2012-01-21
    • 2017-08-08
    • 2014-02-07
    • 2012-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-19
    相关资源
    最近更新 更多