使用带有布尔值的 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 迭代设置字典的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 QSettings 存储 Python 字典

显示带有来自 Core Data 的布尔值的 .sheet

如何访问 pandas 数据框列中的字典元素并对其进行迭代以创建填充有各自值的新列?

游标内带有 INTO 的 MySQL/MariaDB 设置值的迭代不正确

错误:使用带有布尔值的 BLoC_pattern 时出现“错误状态:无元素”

Python Bool和int比较以及带有布尔值的列表索引