0

嗯,我认为我很聪明地用(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

所以问题是:trueQSettings 返回的这个小写字母是什么,我怎样才能让 Python 正确地将它与布尔值进行比较?

我读到你应该用它toBool()来弥补不同平台上的不同表示。但我不知道如何在这样的循环中做到这一点(即事先不知道要比较什么类型)。

任何提示或解决方案表示赞赏!

4

1 回答 1

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 返回的类型设置为字典中实际值的类型。

可以帮助别人...

于 2013-06-18T15:11:21.803 回答