Die while-Schleife ist etwas komisch, weil exakt zu zwei c-Werten etwas gemacht wird, und zwar das, was in den passenden if-Blöcken steht, die while-Schleife kann also weg, ebenso die Schleife über d, was den Code schon sehr viel übersichtlicher macht:
Code: Alles auswählen
Textbox.delete(1.0,END)
i = random.randint(0,len(eintraege)-1) #es wird eine Zufallszahl von 0 bis zur Länge der Einträge-1 erstellt
Textbox.insert(1.0, "Englische Übersetzung von " + eintraege[i].deutsch + " du hast 8 Sekunden!")
englisch = Textbox.get(1.0, END)
if eintraege[i].englisch == englisch:
Textbox.delete(1.0, END)
Textbox.insert(1.0, "richtig!")
else:
Textbox.delete(1.0, END)
Textbox.insert(1.0, "falsch! Die richtige Antwort ist:" + eintraege[i].englisch)
Statt randint würde man direkter randrange, hier aber einfach choice.
Statt Strings mit + zusammenzustückeln benutzt man Formatstrings.
Wenn etwas sowohl im if als auch im else-Block vorkommt, kann man es manchmal auch außerhalb schreiben.
Code: Alles auswählen
Textbox.delete(1.0,END)
vokabel = random.choice(eintraege)
Textbox.insert(1.0, f"Englische Übersetzung von {vokabel.deutsch} du hast 8 Sekunden!")
englisch = Textbox.get(1.0, END)
Textbox.delete(1.0, END)
if vokabel.englisch == englisch:
Textbox.insert(1.0, "richtig!")
else:
Textbox.insert(1.0, f"falsch! Die richtige Antwort ist: {vokabel.englisch}")
Du schreibst also in die Textbox etwas, was gleich wieder ausgelesen wird, den Schritt kannst Du Dir also sparen:
Code: Alles auswählen
vokabel = random.choice(eintraege)
englisch = f"Englische Übersetzung von {vokabel.deutsch} du hast 8 Sekunden!"
if vokabel.englisch == englisch:
ergebnis = "richtig!"
else:
ergebnis = f"falsch! Die richtige Antwort ist: {vokabel.englisch}"
Textbox.delete(1.0, END)
Textbox.insert(1.0, ergebnis)
Die if-Bedingung ist nur dann erfüllt, wenn sehr seltsamer Text also Englische Vokabel in gespeichert ist. Ich vermute mal, dass das nie der Fall ist.
Bei Deiner Frage fehlt der Kontext, den man sich zusammenreimen muß. Du willst ein Vokabelprogramm schreiben, bei dem der Nutzer 8 Sekunden Zeit haben soll, etwas einzutragen. Dir ist als Lösung eine while-Schleife eingefallen, mit der das aber nicht funktioniert, weil so GUIs nicht arbeiten, sie arbeiten ereignisbasiert.
Du mußt also nach dem Anzeigen der deutschen Variable einen callback per after registrieren, der nach 8 Sekunden eine weitere Funktion aufruft, die dann das Ergebnis prüft.
Sonstige Anmerkungen: Sternchenimporte benutzt man nicht, tkinter wird üblicherweise per `import tkinter as tk` importiert und alle Namen per tk.xyz angesprochen. Variablennamen schreibt man nach Konvention komplett klein. Alles was eine Funktion braucht, muß sie über ihre Argumente bekommen, benutze KEINE globalen Variablen. Für GUI Programme braucht man üblicherweise Klassendefinitionen.