使用带有布尔值的 Qsettings 迭代设置字典
Posted
技术标签:
【中文标题】使用带有布尔值的 Qsettings 迭代设置字典【英文标题】:iterate over settings dictionary with Qsettings with boolean values 【发布时间】:2013-06-18 14:52:19 【问题描述】:嗯,我认为我很聪明地使用(Python)字典管理我的 PyQt 设置。这样,我认为我至少可以迭代设置以进行保存和比较。
但我在使用布尔值时遇到了问题。
我有办法
def changed(self):
s = QSettings()
for key in self._options:
#print key, self._options[key], s.value(key)
if self._options[key] != s.value(key):
return True
return False
只要 s 中没有任何布尔值,它就可以工作。 如果字典中有布尔值,该函数总是返回 True。
取消注释 print
行会显示问题并导致
hasDefault True true
所以问题是:QSettings 返回的这个小写的true
是什么,我怎样才能让 Python 正确地将它与布尔值进行比较?
我读到你应该使用toBool()
来弥补不同平台上的不同表示。但我不知道如何在这样的循环中做到这一点(即事先不知道要比较什么类型)。
感谢任何提示或解决方案!
【问题讨论】:
【参考方案1】:也许这个帖子还为时过早,但它有助于让事情变得清晰。
进一步的研究表明,这是非最新 Qt 版本的问题,但现在 QSettings.value() 提供了一个可选的 type
参数来指定返回类型。
有
for key in self._options:
if self._options[key] != s.value(key, type=type(self._options[key])):
return True
return False
我设法将s.value()
s 返回的类型设置为字典中实际值的类型。
愿它帮助别人...
【讨论】:
以上是关于使用带有布尔值的 Qsettings 迭代设置字典的主要内容,如果未能解决你的问题,请参考以下文章
如何访问 pandas 数据框列中的字典元素并对其进行迭代以创建填充有各自值的新列?
游标内带有 INTO 的 MySQL/MariaDB 设置值的迭代不正确