Fenster geht nicht auf und Variable erfährt kein Update

Fragen zu Tkinter.
Antworten
kiaralle
User
Beiträge: 132
Registriert: Donnerstag 19. August 2021, 19:11

Hi,
ich finde gerade den Fehler nicht.

1. das Fenster geht nicht auf.
2. self.i wird nicht aktualiesiert.

Es sind meine ersten Versuche mit Tkinder und Klassen.

Wenn ich die ganze Sachen mit den Update weg lasse, geht das Fenster auf.

Code: Alles auswählen

from tkinter import *
import random


class Updater():
    def __init__(self, messergebnis_label, i):
        self.messergebnis_label = messergebnis_label
        self.i = i

    
    def messupdater(self):
        while True:
            self.messergebnis_label["text"] = self.i
            print(self.i)
            self.messergebnis_label.after(100, self.messupdater)

def main():


    i = random.randint(1, 100)    
    
    fenster = Tk()
    fenster.title("Testprogramm")
    # Fenstergröße ermitteln
    w, h = fenster.winfo_screenwidth(), fenster.winfo_screenheight()
    fenster.geometry("%dx%d+0+0" % (w, h))

    messergebnis_label = Label(fenster)
    messergebnis_label.pack(padx=20)

    exit_button = Button(fenster, text="Beenden", command=fenster.quit)
    exit_button.pack(side='left', padx=20)
    exit_button.config(bg="#FF4444", activebackground="#cc6666",
                       highlightbackground="#ff0000")



    updater = Updater(messergebnis_label, i)
    updater.messupdater()
    fenster.mainloop()


if __name__ == "__main__":
    main()


Danke sagt der Ralf :-)
kiaralle
User
Beiträge: 132
Registriert: Donnerstag 19. August 2021, 19:11

Mein Problem scheint hier zu liegen.

Code: Alles auswählen

def messupdater(self):
        while True:
Benutzeravatar
grubenfox
User
Beiträge: 593
Registriert: Freitag 2. Dezember 2022, 15:49

kiaralle hat geschrieben: Sonntag 8. Dezember 2024, 16:52 1. das Fenster geht nicht auf.
2. self.i wird nicht aktualiesiert.
zu 1. kann ich nicht qualifiziertes sagen. Aber zu 2.: welche Aktualisierung? i wird genau einmal initialisiert und dann nie verändert. Da ist nichts was irgendwie aktualisiert werden könnte/müsste/sollte.
PS. Jetzt habe ich es mal laufen lassen. Ausserdem ist die Methode messupdater kaputt, weil eine Endlosschleife. Die muss da weg...
kiaralle
User
Beiträge: 132
Registriert: Donnerstag 19. August 2021, 19:11

Ja ich möchte i im Fenster aktualisieren.
Meine Erkenntniss, ich spinge im def main() zum def messupdater(self) komme aber da nicht mehr raus.
Der Ablauf ist ja klar. fenster.mainloop kommt ja als letzter Aufruf.

Code: Alles auswählen

    updater = Updater(messergebnis_label, i)
    updater.messupdater()
    fenster.mainloop()
Deshalb geht das Fensgter nicht auf.

Mein Skript dient erst einmal zur Selbsbildung. :-)
Benutzeravatar
grubenfox
User
Beiträge: 593
Registriert: Freitag 2. Dezember 2022, 15:49

kiaralle hat geschrieben: Sonntag 8. Dezember 2024, 17:12 Meine Erkenntniss, ich spinge im def main() zum def messupdater(self) komme aber da nicht mehr raus.
Genau, da bleibt er in der Endlosschleife hängen...
kiaralle
User
Beiträge: 132
Registriert: Donnerstag 19. August 2021, 19:11

Ja "while True" hab ich raus.
Wie bekomme ich da ein update von i hin?
kiaralle
User
Beiträge: 132
Registriert: Donnerstag 19. August 2021, 19:11

Gelöst :-)

Code: Alles auswählen

class Updater():
    def __init__(self, messergebnis_label):
        self.messergebnis_label = messergebnis_label


    
    def messupdater(self):
        i = random.randint(1, 100)
        self.messergebnis_label["text"] = i
        self.messergebnis_label.after(100, self.messupdater)

def main():



    
    fenster = Tk()
    fenster.title("Testprogramm")
    # Fenstergröße ermitteln
    w, h = fenster.winfo_screenwidth(), fenster.winfo_screenheight()
    fenster.geometry("%dx%d+0+0" % (w, h))

    messergebnis_label = Label(fenster)
    messergebnis_label.pack(padx=20)

    exit_button = Button(fenster, text="Beenden", command=fenster.quit)
    exit_button.pack(side='left', padx=20)
    exit_button.config(bg="#FF4444", activebackground="#cc6666",
                       highlightbackground="#ff0000")



    updater = Updater(messergebnis_label)
    updater.messupdater()
    fenster.mainloop()


if __name__ == "__main__":
    main()
Antworten