Seite 1 von 1
CheckBox aus einer funktion heraus checken
Verfasst: Samstag 19. Januar 2008, 15:34
von ensacom
Hallo, ich lese aus einer Datei den Wert true oder false aus.
Wie kann ich nun eine Checkbox je nach ausgelesenem Wert checken oder eben den Hacken entfernen?
Vielen Dank
Verfasst: Samstag 19. Januar 2008, 16:03
von Hobbes Hobson
Code: Alles auswählen
cb2 = wx.CheckBox(self, -1, "Oranges")#, (65, 60), (150, 20), wx.NO_BORDER)
cb2.SetValue(True)
einfach mal in die Doku oder Demo gucken

Verfasst: Samstag 19. Januar 2008, 18:11
von ensacom
Hallo, das habe ich so ähnlich versucht.
Hier mal mein code, ich benutze Boa Constrictor, der erste Teil ist also automatisch generiert worden
Code: Alles auswählen
self.cbEnergieversorgung = wx.CheckBox(id=wxID_FRAME1CBENERGIEVERSORGUNG,
label=u'Energieversorgung', name=u'cbEnergieversorgung',
parent=self, pos=wx.Point(24, 91), size=wx.Size(184, 22),
style=0)
self.cbEnergieversorgung.SetValue(False)
self.cbEnergieversorgung.Bind(wx.EVT_CHECKBOX,
self.OnCbEnergieversorgungCheckbox,
id=wxID_FRAME1CBENERGIEVERSORGUNG)
Hier die Funktion aus der ich die checkbox bearbeiten will.
Code: Alles auswählen
def ReadSettings(self):
home = os.path.expanduser("~")
if not os.path.exists(home+'/.OLED'):
os.chdir(home)
os.mkdir('.OLED')
print 'Verzeichnis angelegt'
if not os.path.exists(home+'/.OLED/settings.conf'):
datei = open(home+'/.OLED/settings.conf','w')
datei.write('datumuhrzeit=true\n')
datei.write('energieversorgung=true\n')
datei.write('akuzustand=true\n')
datei.write('cputemperatur=true\n')
datei.write('traffic=true\n')
datei.write('newmails=false\n')
datei.write('switch=15\n')
datei.write('resettraffic=19\n')
datei.close()
print 'Datei angelegt'
else:
datei = open(home+'/.OLED/settings.conf', 'r')
line = datei.readlines()
for i in range(len(line)):
line[i] = line[i].split("=")
datum=line[0][1]
energie=line[1][1]
akku=line[2][1]
cpu=line[3][1]
traffic=line[4][1]
mail=line[5][1]
switch=line[6][1]
reset=line[7][1]
datei.close()
print reset
self.cbEnergieversorgung.setValue(reset) #reset steht eben True oder False
Ich bekomme die Fehlermeldung
Verfasst: Samstag 19. Januar 2008, 18:28
von gerold
ensacom hat geschrieben:Code: Alles auswählen
self.cbEnergieversorgung.setValue(reset) #reset steht eben True oder False
Hallo ensacom!
Achte auf die Groß-/Kleinschreibung. Ein ``setValue`` gibt es nicht.
Nur die von dir gezeigte Fehlermeldung passt nicht dazu.
mfg
Gerold

Verfasst: Samstag 19. Januar 2008, 18:36
von ensacom
Ok, das hat was gebracht. JEtzt ein neues Problem. Ich übergbe ja das True oder False per Variable deren Inhalt ich aus der datei auslese,
Jetzt bekomme ich folgende Fehlermeldung
Code: Alles auswählen
True
Traceback (most recent call last):
File "/home/ensacom/Projekte/OLED/Frame1.py", line 124, in OnCbDatumCheckbox
self.ReadSettings()
File "/home/ensacom/Projekte/OLED/Frame1.py", line 194, in ReadSettings
self.cbEnergieversorgung.SetValue(energie)
File "/usr/lib/python2.5/site-packages/wx-2.8-gtk2-unicode/wx/_controls.py", line 384, in SetValue
return _controls_.CheckBox_SetValue(*args, **kwargs)
TypeError: in method 'CheckBox_SetValue', expected argument 2 of type 'bool'
Ich denke ich muss den String "True" in einen Boolschen Wert umwandeln.
Wie mache ich das?
Verfasst: Samstag 19. Januar 2008, 18:52
von BlackJack
Code: Alles auswählen
In [101]: s = 'True'
In [102]: s == 'True'
Out[102]: True
In [103]: s = 'Irgendwas'
In [104]: s == 'True'
Out[104]: False
Verfasst: Samstag 19. Januar 2008, 20:16
von ensacom
Nimms mir bitte nicht übel aber ich weiß gerade nicht was du mir damit sagen willst.
Wenn Du das meinst, das funktioniert auch nicht. Es wird True ausgegeben aber trotzdem wird es nicht markiert
Code: Alles auswählen
print energie
if energie == 'True':
self.cbEnergieversorgung.SetValue(True)
else:
self.cbEnergieversorgung.SetValue(False)
Verfasst: Samstag 19. Januar 2008, 21:06
von gerold
ensacom hat geschrieben:Es wird True ausgegeben aber trotzdem wird es nicht markiert
Code: Alles auswählen
print energie
if energie == 'True':
self.cbEnergieversorgung.SetValue(True)
else:
self.cbEnergieversorgung.SetValue(False)
Hallo ensacom!
Ändere deinen Code so um:
Code: Alles auswählen
print repr(energie)
if energie == 'True':
self.cbEnergieversorgung.SetValue(True)
print "TRUE gesetzt"
else:
self.cbEnergieversorgung.SetValue(False)
print "FALSE gesetzt"
self.cbEnergieversorgung.Refresh()
4 Leerzeichen sind für Python-Programmierer Standard! Ich hätte mich jetzt fast vertan.
mfg
Gerold

Verfasst: Samstag 19. Januar 2008, 21:10
von ensacom
Vielen Dank.
Ich glaube ich habe durch dein Beispiel nun auch den Fehler gefunden.
Hinter dem True steht noch ein \n.
Muss ich das also erst mal entfernen.
Verfasst: Samstag 19. Januar 2008, 21:34
von gerold
ensacom hat geschrieben:Hinter dem True steht noch ein \n.
Hallo ensacom!
Und das funktioniert so: ``energie.rstrip()``.
mfg
Gerold

Verfasst: Samstag 19. Januar 2008, 21:39
von ensacom
ja ich habe es so gemacht
anstat
Ist das so in Ordnung?
Verfasst: Samstag 19. Januar 2008, 22:24
von BlackJack
@ensacom: Damit habe ich Dir gezeigt, wie man aus der Zeichenkette 'True' einen entsprechenden Wahrheitswert bekommt. Deutlicher als es an einem praktischen Beispiel zu demonstrieren geht's doch nun wirklich nicht mehr.
Das ``if``/``else`` kann man sich dann auch sparen:
Funktionen aus `string`, die es auch als Methoden auf Zeichenketten gibt, sollte man nicht mehr verwenden.