Wie starte ich die While Schleife in Python neu?

2 Antworten

GUI-Toolkits wie Tkinter haben ihre eigene (Event) Loop. Sobald während der Ausführungszeit ein Ereignis auf der Oberfläche getriggert wird, kann man dieses abfangen und behandeln. Ein Beispiel dafür siehst du beim Button. Bei Klick wird die Funktion aufgerufen, auf die sein command-Attribut zeigt.

Es reicht daher aus, nur ein Fenster zu zeichnen und alle Daten aus deiner Textdatei anfangs einmal einzulesen. Eine Liste an Objekten oder ein Dictionary wären hierfür geeignet.

Dann wäre eine Funktion notwendig, die eine zufällige Vokabel zur Abfrage ermittelt. Die wird einmal zu Programmstart genutzt und einmal, sobald eine Vokabel geprüft wurde. Die Texte der Labels (u.ä.) können zwischenzeitlich mit configure geändert werden.

Ich habe dein Skript dementsprechend einmal umgeändert.

import random
from tkinter import *

def check_input():
  if input_field.get() == translation:
    output_label.configure(text="Richtig!", fg="green")
  else:
    output_label.configure(text="Leider falsch!", fg="red")

  setup()

def setup():
  global word, translation
  word, translation = random.choice(list(vocabularies.items()))
  label.configure(text=f"Ausgangsvokabel: {word}")

vocabularies = {}

with open("vocabularies.txt", "r") as file:
  for line in file:
    words = line.strip().split(",")
    vocabularies[words[0]] = words[1]

window = Tk()
window.title("Prüfung")
window.geometry("400x500")
label = Label(window, font="Arial_Black 20")
label.place(x=10, y=10)
input_field = Entry(window)
input_field.place(x=10, y=50)
output_label = Label(window, font="Arial 21")
output_label.place(x=10, y=180)
start_button = Button(window, text="Prüfen", command=check_input)
start_button.place(x=10, y=100)

setup()

window.mainloop()

Für die Vokabeln habe ich ein anderes Datenformat als du verwendet. Bei mir würde je Zeile ein Vokabelpaar stehen, getrennt durch ein Komma.

Alex950130 
Fragesteller
 17.12.2022, 12:15

Danke für deine Umänderung. Das Problem habe ich jetzt behoben. :D

0

While schleife in Funktion

Funktion aufrufen bei weiter

Woher ich das weiß:Studium / Ausbildung
Alex950130 
Fragesteller
 14.12.2022, 19:34

Aber das ist dann ja in der While Schleife. Wie soll ich eine Funktion in einer Funktion aufrufen? Kommt das dann nicht zu einem Fehler?

def Fun():
  print("Start Funktion")
  Fun()
  print("Ende Funktion")
0