Seite 1 von 1
Wie kann ich ein Label nach einer bestimmten Zeit ändern?
Verfasst: Mittwoch 7. März 2018, 10:35
von Col.Mars
Hi ich schreibe gerade ein Programm in dem das Ergebnis einer Datenbank Abfrage in 3 Variablen gespeichert und dann von 3 Labels ausgegeben wird.
Da die Abfrage einen Geld Betrag sowie vor und Nachname anzeigt, sollte dies nicht länger als wenige Sekunden zu sehen sein.
Code: Alles auswählen
result = cursor.fetchall()
for data in result:
vorname = str(data[1])
name = str(data[2])
guthaben = float(data[3])
L_Name.config(text=name)
L_Vorname.config(text=vorname)
L_Guthaben.config(text=guthaben)
cursor.close()
time.sleep(3)
L_Name.config(text="")
L_Vorname.config(text=""
L_Guthaben.config(text="")
Leider funktioniert das so nicht :/
Re: Wie kann ich ein Label nach einer bestimmten Zeit ändern?
Verfasst: Mittwoch 7. März 2018, 11:02
von Sirius3
@Col.Mars: da GUIs ereignisbasiert arbeiten, darf eine Funktion nicht längere Zeit brauchen, verboten sind also `sleep`, Endlosschleifen, etc. Lösung ist mit `after` nach einer bestimmten Zeit eine weitere Funktion aufzurufen.
Wenn eine SQL-Abfrage exakt ein Ergebnis liefert, sollte man keine Schleife sondern `fetchone` verwenden. Statt bei Labels die text-Eigenschaft zu setzen, benutze `StringVar`. `vorname` und `name` sollten schon Strings sein, das guthaben sollte mit `format` entsprechend der Nachkommastellenanzahl formatiert werden. Den SQL-Ausdruck hast Du nicht gezeigt, dort sollte aber die Namen der Felder explizit angegeben werden. Statt `data` kann man dann gleich Tupleunpacking benutzen.
Re: Wie kann ich ein Label nach einer bestimmten Zeit ändern?
Verfasst: Montag 3. September 2018, 17:13
von Col.Mars
Wie funktioniert das mit 'format' ? Steige da irgendwie nicht ganz durch
Wenn ich mir jetzt ein Guthabenstand von "1.10€" anzeigen möchte wird mir "1.1€" angzeigt, wenn ich das richtig verstanden habe bewirkt 'format', dass mir dann auch wirklich "1.10€" angezeigt wird?
Re: Wie kann ich ein Label nach einer bestimmten Zeit ändern?
Verfasst: Montag 3. September 2018, 17:21
von __deets__
Das ist alles dokumentiert:
https://docs.python.org/3/library/strin ... t-examples
Dein Beispiel waere
'Correct answers: {:.2%}'.format(points/total)
Re: Wie kann ich ein Label nach einer bestimmten Zeit ändern?
Verfasst: Montag 3. September 2018, 23:11
von Col.Mars
'Correct answers: {:.2%}'.format(points/total)
Scheint so als würde ich dort einen Prozentwert erhalten.
Ich benötige jedoch etwas was mir statt "1.1" -> "1.10" anzeigt.
Re: Wie kann ich ein Label nach einer bestimmten Zeit ändern?
Verfasst: Montag 3. September 2018, 23:46
von __blackjack__
@Col.Mars: Das war ja auch nur ein Beispiel, Du musst dann schon schauen was Du konkret für Deinen Fall für Formatierungsanweisungen brauchst.
Re: Wie kann ich ein Label nach einer bestimmten Zeit ändern?
Verfasst: Montag 3. September 2018, 23:48
von Col.Mars
Hab's, hier die Lösung falls jemand ein ähnliches Problem hat
Code: Alles auswählen
for data in result:
guthaben = str(data[3])
nummer = "{num:<04}".format(num=guthaben)
label2.config(text=nummer)
cursor.close()
Für Werte wie bspw. 26.10 geht es folgendermaßen
Code: Alles auswählen
for data in result:
guthaben = str(data[3])
if len(guthaben) > 3:
nummer = "{num:<05}".format(num=guthaben)
else:
nummer = "{num:<04}".format(num=guthaben)
anweisungs_label2.config(text=nummer)
cursor.close()
Re: Wie kann ich ein Label nach einer bestimmten Zeit ändern?
Verfasst: Montag 3. September 2018, 23:50
von Col.Mars
__blackjack__ hat geschrieben: ↑Montag 3. September 2018, 23:46
@Col.Mars: Das war ja auch nur ein Beispiel, Du musst dann schon schauen was Du konkret für Deinen Fall für Formatierungsanweisungen brauchst.
Ist mir auch aufgefallen
, war nur ein wenig verwirrt weil's hieß "
Dein Beispiel wäre"
Re: Wie kann ich ein Label nach einer bestimmten Zeit ändern?
Verfasst: Dienstag 4. September 2018, 07:48
von Sirius3
@Col.Mars: so macht man das nicht.
Code: Alles auswählen
_, vorname, name, guthaben = cursor.fetchone()
guthaben = "{:.2f}".format(guthaben)
Re: Wie kann ich ein Label nach einer bestimmten Zeit ändern?
Verfasst: Dienstag 4. September 2018, 08:17
von __blackjack__
Wobei man wenn man wirklich nur den Wert und nichts zusätzliches formatieren möchte, auch die `format()`-Funktion verwenden kann:
Re: Wie kann ich ein Label nach einer bestimmten Zeit ändern?
Verfasst: Dienstag 4. September 2018, 10:20
von __deets__
Ich hab' mich da verguckt und das Prozentzeichen *IM* Format-Ausdruck nicht gesehen. Damit ist es natuerlich nicht das richtige Beispiel, aber es finden sich genug andere auf der Seite.