PyQt5 не сохраняет настройки в INI-файлы - PullRequest
0 голосов
/ 29 августа 2018

Для приложения мне нужно читать / записывать значения в INI-файлах. Я использую python3 с pyqt5 на Windows7 и получил этот маленький пример:

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 Ответ

0 голосов
/ 29 августа 2018

Вы должны вызвать метод sync(), чтобы сохранить значения:

...

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

settings.sync() # <---

Вышесказанное четко указано в документах:

void QSettings :: sync ()

Записывает любые несохраненные изменения в постоянное хранилище и перезагружает любые настройки, которые были изменены тем временем другим применение.

Эта функция вызывается автоматически из деструктора QSettings и через цикл событий через равные промежутки времени, поэтому вам обычно не нужно называйте это сами ..

Из предыдущего пункта это означает, что этот метод отвечает за сохранение изменений, и что если цикл событий существует с использованием некоторого QXXXAplication.exec_(), он вызывается в деструкторе, но в вашем случае его нет, поэтому вы должен вызывать это явно.

...