2013-06-18 1 views
0

Hm, je pensais que j'étais intelligent pour gérer mes paramètres PyQt avec un dictionnaire (Python). De cette façon, j'ai pensé que je pourrais itérer sur les paramètres au moins pour enregistrer et comparer.itérer sur le dictionnaire des paramètres avec Qsettings avec des valeurs booléennes

Mais j'ai rencontré des problèmes lors de l'utilisation de valeurs booléennes.

J'ai une méthode

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 

Cela fonctionne tant qu'il n'y a pas de valeurs booléennes dans s.
S'il existe une valeur booléenne dans le dictionnaire, la fonction renvoie toujours la valeur True.

la ligne print Enlever les commentaires montre la question et les résultats dans

hasDefault True true 

La question est donc: quel est ce minuscule true qui QSettings les retours, et comment puis-je obtenir Python pour comparer cela correctement à un booléen?

J'ai lu que vous devriez utiliser toBool() pour compenser différentes représentations sur différentes plateformes. Mais je ne vois pas comment je peux faire ceci dans une telle boucle (c'est-à-dire ne sachant pas à l'avance quel type il y a à comparer).

Tout conseil ou solution apprécié!

Répondre

1

Peut-être que le message était prématuré, mais il était utile pour obtenir des choses claires. D'autres recherches ont montré qu'il s'agit d'un problème avec les versions Qt pas les plus récentes, mais que QSettings.value() offre maintenant un argument optionnel type pour spécifier le type de retour.

Avec

for key in self._options: 
     if self._options[key] != s.value(key, type=type(self._options[key])): 
      return True 
    return False 

J'ai réussi à définir le type de retour de s.value() au type de la valeur réelle dans le dictionnaire. Il peut aider quelqu'un d'autre ...

Questions connexes