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 :D
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 :D

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 :D

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 :mrgreen:, war nur ein wenig verwirrt weil's hieß "Dein Beispiel wäre" :D

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:

Code: Alles auswählen

guthaben = format(guthaben, '.2f')

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.