python - PyQt4:将列表保存到 QSettings

标签 python pyqt pyqt4

我制作了一个列表(数组)来计算游戏完成的次数。但是如果有人重新启动游戏,列表的长度将会重置。

据我所知,QSettings 专用于保存和存储数据。我已阅读文档,但对我的帮助不够。

例如我有一个全局数组:

global finishcount
finishcount = []

如何将其应用于 QSettings?这样我就可以在其上附加数据而不会在重启后丢失数据。

它应该看起来像这样吗?

from PyQt4 import QtGui, QtCore
global finishcount
finishcount = []
settings = QtCore.QSettings(self)
settings.setValue(finishcount, self)

我怎样才能做到这一点?或者我可以在 QSettings 本身中列出我可以附加内容的列表吗?

最佳答案

下面是一个非常简单的演示,展示了如何读取整数列表并将其写入QSettings。每次打开和关闭窗口时,该演示都会自动添加一个新值。

如果您使用的是 PyQt,则根本不需要使用 json。对于列表,只需提供默认值,并指定包含值的类型:

    settings.value('finishcount', [], int)

演示:

from PyQt4 import QtCore, QtGui

class Window(QtGui.QWidget):
    def __init__(self):
        super(Window, self).__init__()
        settings = QtCore.QSettings('my_org', 'my_app')
        self._finishcount = settings.value('finishcount', [], int)
        print('read settings: %s' % self._finishcount)
        # add a new value for testing
        self._finishcount.append(len(self._finishcount))

    def closeEvent(self, event):
        settings = QtCore.QSettings('my_org', 'my_app')
        settings.setValue('finishcount', self._finishcount)
        print('save settings: %s' % self._finishcount)

if __name__ == '__main__':

    import sys
    app = QtGui.QApplication(sys.argv)
    window = Window()
    window.setGeometry(600, 100, 100, 100)
    window.show()
    sys.exit(app.exec_())

注意:对于字符串列表的特殊情况,最好使用这个:

    settings.value('finishcount', [], 'QStringList')

而不是用 str 指定类型。否则,空列表不会得到正确处理。

关于python - PyQt4:将列表保存到 QSettings,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37066961/

相关文章:

python - 在字典中存储和检索图像 - python

python - 将列表中的字典添加到另一个列表中

python - 如何动态更新QTextEdit

python - 在 python 中处理 .ige 文件

python - 为什么 x <= x 为假?

python - 在 GUI 记录器中添加颜色

python - 无法完全删除 PyQt QGraphicsView 的边框

python - 挂起当前函数直到对话框关闭

python - 我怎样才能传递给信号槽的信号在 pyqt4 中发送的参数更多?

python - 在 Scientific Linux 6.5 上安装 PyQt4.11.2