我正在尝试使用保存列表QSettings
,其中我将其编码如下:settings.setValue('ids', id_list)
但是,如果id_list中只有一个项目,当我重新启动我的代码时,要加载的设置将ids
其捕获为字符串值而不是列表。
以下是我编码存储值的方式:
settings = QtCore.QSettings('MyTest', 'Itemize')
id_list = []
for item_id in item_list:
id_list.append(item_id)
settings.setValue('ids', id_list)
当我试图将其重写为:
settings.value('ids', [], 'QStringList')
我收到一个错误:
TypeError: PySide2.QtCore.QSettings.value(): too many arguments #
发布于 2019-05-23 10:13:59
QSettings :: value()只接受2个参数:键和默认值,如果键不存在则返回,因此第三个参数是不必要的,除了PySide2当前将所有Qt类型映射到本机类型的python,在QStringList的情况被映射为字符串列表,解决方案是:
from PySide2 import QtCore
settings = QtCore.QSettings('MyTest', 'Itemize')
id_list = []
item_list = [u'541e-fe83-430d-9428-8595', u'b569-e7bb-4a4d-a8f6-4ed0']
for item_id in item_list:
id_list.append(item_id)
settings.setValue('ids', id_list)
r = settings.value('ids', [])
print(r)
输出:
['541e-fe83-430d-9428-8595', 'b569-e7bb-4a4d-a8f6-4ed0']
我的测试代码:
from PySide2 import QtCore
settings = QtCore.QSettings('MyTest', 'Itemize')
if settings.value('ids') is None:
settings.setValue('ids', ['541e-fe83-430d-9428-8595', 'b569-e7bb-4a4d-a8f6-4ed0'])
else:
print(settings.value('ids'))
https://stackoverflow.com/questions/-100006787
复制相似问题