如何使用 QSettings 存储 Python 字典
Posted
技术标签:
【中文标题】如何使用 QSettings 存储 Python 字典【英文标题】:How to store Python dictionary with QSettings 【发布时间】:2017-01-21 02:52:37 【问题描述】:下面的代码使用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
【问题讨论】:
【参考方案1】: 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
这个问题不存在,因为它返回一个常规字典,不再需要用 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
【讨论】:
在 Python 2 中可以做到这一点。您需要做的就是使用 sip.setapi 来获得与 Python 3 相同的行为。我不知道为什么有人想要保留这些讨厌的东西QString
和 QVariant
输入他们的代码。在 Python 2 中使用 str()
进行转换也是错误的 - 您应该始终使用 unicode()
进行转换以避免解码/编码错误。【参考方案2】:
original = PyQt4.QtCore.QString(u'one'): 1, PyQt4.QtCore.QString(u'two'): 2
converted = str(k): val for k, v in original.items()
【讨论】:
这确实太简短而无用,特别是与其他更全面的答案相比。应添加说明。以上是关于如何使用 QSettings 存储 Python 字典的主要内容,如果未能解决你的问题,请参考以下文章