in meinem Programm hab ich eine zeitaufwendige Abarbeitung in einen extra Thread "ausgelagert", so dass ich meine Oberfläche noch bedienen kann. Mit break komme ich auch vorzeitig aus meiner Schleife und aus dem entsprechendem Thread raus. Dabei muss ich aber warten bis die Zeit des aktuellen Schleifendurchlaufs runter gelaufen ist. Weiterhin bekomme ich eine "RuntimeError: main thread is not in main loop" wenn ich das HauptFenster beende (Beenden-Button) bevor der Thread beendet ist. Gibt es eine Möglichkeit den Thread vorzeitig und sauber zu verlassen?
Danke.
Gruß.
ottto
Code: Alles auswählen
import tkinter as tk
import os, glob, time
import threading
class Thread1GUI:
def __init__(self, master):
self.master=master
master.title("+++ test thread +++")
self.start = tk.Button(master, text=" Ausgabe ! ", command = self.start_click)
self.start.grid(row=0, column=0)
self.ausgabe = tk.Label(master)
self.ausgabe.grid(row=1, column=0)
self.abbrechen = tk.Button(master, text=" Abbrechen ! ", command = self.abbrechen_click)
self.abbrechen.grid(row=2, column=0)
self.beenden = tk.Button(master, text=" Beenden ! ", command = master.quit)
self.beenden.grid(row=3, column=0)
self.mein_break = False
def start_click(self):
def thread_verarbeitung():
for i in range(6):
if self.mein_break == True:
self.ausgabe.config(text="Abbruch !!!")
break
print(i)
self.text=i
self.ausgabe.config(text=self.text)
time.sleep(5)
t1 = threading.Thread(target=thread_verarbeitung)
t1.start()
print("t1 Fertig!")
def abbrechen_click(self):
self.mein_break = True
def main():
root = tk.Tk()
mein_Thread1GUI = Thread1GUI(root)
root.mainloop()
if __name__ == '__main__':
main()