ich möchte in Tkinter mit einem Button eine Funktion aufrufen. Während diese aufgerufene Funktion läuft, ist meine GUI eingefroren. Um das zu verhindern habe ich den Funktionsaufruf in einen Thread gepackt. Das funktioniert wunderbar, allerdings nur ein Mal. Drücke ich den Button ein zweites Mal, bekomme ich die Fehlermeldung: RuntimeError: threads can only be started once.
Was muß ich tun um den Button auch mehrmals drücken zu können?
button1 -> GUI für 5 Sekunden eingefroren
button2 -> GUI läuft weiter und ich kann wärend die 5 Sekunden laufen den button3 klicken, allerdings nach Ablauf der 5 Sekunden kein zweites Mal
Ich weiß, Code auf Modulebene und kein pep8 aber ist halt nur ein Beispiel.
Code: Alles auswählen
from tkinter import Tk, Label, Button
from threading import Thread
import time
from random import randint
root = Tk()
root.geometry('500x400')
def fuenf_sekunden():
label.config(text='5 Sekunden laufen...')
time.sleep(5)
label.config(text='Ich habe fertig!')
def zufallszahl():
random_label.config(text=f'Zufällige Zahl {randint(1, 100)}')
label = Label(root, text='Hello World')
label.pack(pady=20)
button1 = Button(root, text='5 Sekunden ohne', command=fuenf_sekunden)
button1.pack(pady=20)
button2 = Button(root, text='5 Sekunden mit', command=Thread(target=fuenf_sekunden).start)
button2.pack(pady=20)
button3 = Button(root, text='Zufällige Zahl ausgeben', command=zufallszahl)
button3.pack(pady=20)
random_label = Label(root, text='')
random_label.pack(pady=20)
root.mainloop()