Я слышал, что потоки в Python нелегко обрабатывать, и они становятся более запутанными с tkinter.
У меня есть следующая проблема. У меня есть два класса: один для графического интерфейса и другой для бесконечного процесса. Во-первых, я запускаю класс GUI, а затем класс бесконечного процесса. Я хочу, чтобы при закрытии графического интерфейса он также заканчивал бесконечный процесс и заканчивается программа.
Упрощенная версия кода выглядит следующим образом:
import time, threading
from tkinter import *
from tkinter import messagebox
finish = False
class tkinterGUI(threading.Thread):
def __init__(self):
threading.Thread.__init__(self)
def run(self):
global finish
#Main Window
self.mainWindow = Tk()
self.mainWindow.geometry("200x200")
self.mainWindow.title("My GUI Title")
#Label
lbCommand = Label(self.mainWindow, text="Hello world", font=("Courier New", 16)).place(x=20, y=20)
#Start
self.mainWindow.mainloop()
#When the GUI is closed we set finish to "True"
finish = True
class InfiniteProcess(threading.Thread):
def __init__(self):
threading.Thread.__init__(self)
def run(self):
global finish
while not finish:
print("Infinite Loop")
time.sleep(3)
GUI = tkinterGUI()
GUI.start()
Process = InfiniteProcess()
Process.start()
Когда я нажимаю кнопку закрытия (в правом верхнем углу), в консоли появляется следующая ошибка:
Tcl_AsyncDelete: обработчик async удален из-за неправильного потока
Я не знаю, почему это происходит или что это значит, пожалуйста, помогите!