Seite 1 von 1
					
				'false' zu False und 'true' zu True
				Verfasst: Freitag 6. Dezember 2024, 00:22
				von Knollo
				Hallo in die Runden, ich versuch grad Werte aus der Registry zu lesen und von String zu Bool umzuwandeln -> siehe Box:
Code: Alles auswählen
    def settings_read(self):
        # Einstellungen aus Registry importieren:
        settings = QSettings("Thingspeak_chart")
        state = settings.value('chkbox_esp_aussen') # gibt den String 'false' oder 'true' zurück
        state = bool(state) # gibt immer True zurück, egal ob 'true' oder 'false' aus der Registry gelesen wurde
        print(state)
        self.chkbox_esp_aussen.setChecked(state)
muss ich an der Stelle wirklich mit 'if else' arbeiten, oder gibt es andere Lösungen dafür?
Danke - Stefan
 
			 
			
					
				Re: 'false' zu False und 'true' zu True
				Verfasst: Freitag 6. Dezember 2024, 00:37
				von __blackjack__
				@Knollo: Warum gibt das eine Zeichenkette zurück?  Wenn man da Wahrheitswerte rein steckt, sollten da auch wieder Wahrheitswerte raus kommen, und keine Zeichenketten:
Code: Alles auswählen
In [348]: ss = QSettings()
In [349]: ss.setValue("is_something", True)
In [350]: ss.value("is_something")
Out[350]: True
In [351]: type(ss.value("is_something"))
Out[351]: bool
 
			 
			
					
				Re: 'false' zu False und 'true' zu True
				Verfasst: Freitag 6. Dezember 2024, 00:50
				von Knollo
				Warum gibt das eine Zeichenkette zurück?
 - ich hab keine Ahnung...
Wert setzen:
Code: Alles auswählen
settings.setValue('chkbox_esp_aussen', self.chkbox_esp_aussen.isChecked())
  aber die Ausgabe erfolgt als String.
Code: Alles auswählen
self.chkbox_esp_aussen.setChecked(eval((settings.value("chkbox_esp_aussen").capitalize())))
 passt , aber VS-Code meckert bei 'capitalize' mit gewellter Linie, führt trotzdem das Script korrekt aus.
 
			 
			
					
				Re: 'false' zu False und 'true' zu True
				Verfasst: Freitag 6. Dezember 2024, 10:39
				von Knollo
				Hm, das Problem liegt vermutlich im Betriebssystem:
    Linux schreibt: true oder false
    Windows schreibt: 'true' oder 'false'
richtig wäre unter Windows: 1 oder 0
kann das so sein?
			 
			
					
				Re: 'false' zu False und 'true' zu True
				Verfasst: Freitag 6. Dezember 2024, 11:10
				von grubenfox
				Offenbar kann man da auch einen "Wunsch"-Typ mit angeben 
https://doc.qt.io/qtforpython-6/PySide6 ... ings.value
Was liefert denn
Code: Alles auswählen
state = settings.value('chkbox_esp_aussen', type=bool)
?
 
			 
			
					
				Re: 'false' zu False und 'true' zu True
				Verfasst: Freitag 6. Dezember 2024, 11:18
				von Knollo
				
wäre schön, aber leider meckert VS-Code...
 
			 
			
					
				Re: 'false' zu False und 'true' zu True
				Verfasst: Freitag 6. Dezember 2024, 11:57
				von sparrow
				Was VS-Code da anzeigt ist ja egal.
Was passiert denn wenn du es ausführst?
			 
			
					
				Re: 'false' zu False und 'true' zu True
				Verfasst: Freitag 6. Dezember 2024, 12:01
				von __blackjack__
				@Knollo: Was bekommst Du denn von `value()` zurück?  Was für einen Typ hat das?  Kann es sein, dass Du da keine Qt-Anbindung verwendest die selbst umwandelt und da tatsächlich der Typ zurück kommt den C++ da verwendet?
			 
			
					
				Re: 'false' zu False und 'true' zu True
				Verfasst: Freitag 6. Dezember 2024, 12:57
				von Knollo
				Was passiert denn wenn du es ausführst?
Code: Alles auswählen
TypeError: 'PySide6.QtWidgets.QAbstractButton.setChecked' called with wrong argument types:
  PySide6.QtWidgets.QAbstractButton.setChecked(str)
Supported signatures:
  PySide6.QtWidgets.QAbstractButton.setChecked(bool)
gibt String zurück, erwartet wird Bool
gelöst hab ich jetzt so:
Code: Alles auswählen
self.chkbox_esp_aussen.setChecked(False if settings.value("chkbox_esp_aussen") == 'false' else True)
 
			 
			
					
				Re: 'false' zu False und 'true' zu True
				Verfasst: Freitag 6. Dezember 2024, 17:22
				von __blackjack__
				@Knollo: Das sieht nach einem Bug aus.  Oder es wird tatsächlich irgendwo eine Zeichenkette als Wert gesetzt.  Ich hatte ja weiter oben ein minimales Beispiel gezeigt, wo ich einen Wahrheitswert rein stecke und auch wieder heraus hole, und keine Zeichenkette.  So sollte das sein.
			 
			
					
				Re: 'false' zu False und 'true' zu True
				Verfasst: Sonntag 8. Dezember 2024, 13:52
				von Knollo
				 Ich hatte ja weiter oben ein minimales Beispiel gezeigt, wo ich einen Wahrheitswert rein stecke und auch wieder heraus hole, und keine Zeichenkette. So sollte das sein.
auf dem Raspi kann ich Dein Beispiel nachvollziehen, das passt es.
Unter Windows wird True oder False als String gespeichert. Man könnte es ja auch unter Win 10 testen, aber was bringt's....
Eine/ meine Lösung:
Code: Alles auswählen
 # schreibe in die Registry:
 settings.setValue('chkbox_esp_aussen', 0 if self.chkbox_esp_aussen.isChecked()== False else 1)
 
dann klappt auch das Lesen ohne if -> else
Code: Alles auswählen
self.chkbox_esp_aussen.setChecked(settings.value("chkbox_esp_aussen"))
ergo: in der Windowsregistry werden  True und False als String gespeichert und Wahrheitswerte nur als 0 und 1 akzeptiert, wobei Python mit der Interpredation von 0 und 1 keine Probleme hat.
 
			 
			
					
				Re: 'false' zu False und 'true' zu True
				Verfasst: Sonntag 8. Dezember 2024, 14:27
				von __blackjack__
				@Knollo: Statt des ``0 if something == False else 1`` würde man einfach ``int(something)`` schreiben.
Code: Alles auswählen
In [436]: int(False)
Out[436]: 0
In [437]: int(True)
Out[437]: 1
Rückumwandlung geht mit `bool()`.
 
			 
			
					
				Re: 'false' zu False und 'true' zu True
				Verfasst: Sonntag 8. Dezember 2024, 15:21
				von Knollo
				Danke, hab ich nun so eingebaut - sieht auch übersichtlicher aus. Die Rückumwandlung mit 'bool()' ist nicht notwendig - Python inteprediert 1 und 0 als True und False.
Stefan
			 
			
					
				Re: 'false' zu False und 'true' zu True
				Verfasst: Sonntag 8. Dezember 2024, 16:31
				von __blackjack__
				@Knollo: Weiss ich, aber wenn man dann mal Fehlersuche betreibt oder so etwas als JSON kodieren will oder so, ist es halt doch schöner `True` und `False` statt 1 und 0 zu verwenden/sehen.
			 
			
					
				Re: 'false' zu False und 'true' zu True
				Verfasst: Sonntag 8. Dezember 2024, 18:43
				von Knollo
				mh, tatsächlich meckert Pylance nach der Verwendung von 'bool()' nicht weiter - danke. 
