如何使用 QSettings 存储 Python 字典

How to store Python dictionary with QSettings

下面的代码使用 QSettings 对象存储 Python data 字典。 读回字典后,它的所有键都像 QString 一样:

{PyQt4.QtCore.QString(u'one'): 1, PyQt4.QtCore.QString(u'two'): 2}

我想知道是否可以使用像这样的常规字符串键来阅读字典:

{'one': 1, 'two': 2}

代码:

from PyQt4 import QtCore, QtGui
app = QtGui.QApplication([])

settings = QtCore.QSettings('apps', 'settings')

data = {'one': 1, 'two': 2}

settings.setValue('data', data)

data = settings.value('data').toPyObject()
print data
  • Python2

直接不可以,你必须将它们转换成普通字典。

d = {}
for k, v in data.items():
    d[str(k)] = v

完整代码:

from PyQt4 import QtCore, QtGui
app = QtGui.QApplication([])

settings = QtCore.QSettings('apps', 'settings')

data = {'one': 1, 'two': 2}

settings.setValue('data', data)

data = settings.value('data').toPyObject()
d = {}
for k, v in data.items():
    d[str(k)] = v

print(d)

输出:

{'two': 2, 'one': 1}
  • Python3

这个问题不存在,因为它 returns 你是一个普通的字典,不再需要用 toPyObject() 转换它。

from PyQt4 import QtCore, QtGui
app = QtGui.QApplication([])

settings = QtCore.QSettings('apps', 'settings')

data = {'one': 1, 'two': 2}

settings.setValue('data', data)

data = settings.value('data')
print(data)

输出:

 {'one': 1, 'two': 2}
original = {PyQt4.QtCore.QString(u'one'): 1, PyQt4.QtCore.QString(u'two'): 2}
converted = {str(k): val for k, v in original.items()}