In my GUI windows are not deleted by different threads, it’s just that the loading screen runs on a different thread. It repeatedly checks a variable outside the thread to choose whether to terminate or not, whenever the loading screen terminates nothing happens but when I close the main window from main thread, then this error comes(note that when I close the main window, the loading screen terminated long ago). Why is this happening? Here’s my code:
from tkinter import *
from tkinter.font import Font
from threading import Thread
from datetime import datetime, date
import os
login = os.getlogin()
loaded = False
bg = "#17191c"
def load():
load = Tk()
load.config(bg = bg)
load.state("zoomed")
dimensions = (load.winfo_height(), load.winfo_width())
load.state("normal")
load.overrideredirect(True)
load.geometry("517x357+" + str(dimensions[0]//2) + "+" + str(dimensions[1]//2))
Label(load, text = "Path finder", font = ("Sans Serif", 50), fg = "black", bg = bg).pack(anchor = "nw")
Label(load, text = "Loading...", font = ("Sans Serif", 10), fg = "black", bg = bg).pack(anchor = "sw")
def check():
if loaded:
load.destroy()
else:
load.after(1, check)
check()
load.mainloop()
load_thread = Thread(target = load)
load_thread.start()
root = Tk()
root.title("Path finder")
root.withdraw()
def disable():
pass
class Setting:
def __init__(self):
settings = {}
file = open("user-setting.setting", "r")
self.file = file
for pair in file.read().split("\n"):
exec("settings.update({" + pair + "})")
self.settings = settings
def edit(self, setting, new_setting):
self.settings[setting] = new_setting
def reopen(self):
self.file = open("user-setting.setting", "r")
def save(self):
self.file.close()
file = open("user-setting.setting","w")
for x in self.settings:
file.write('"' + str(x) + '":"' + str(self.settings[x]) + '"\n')
try:
settings = Setting()
exec('settings.settings["geometry"] = ' + str(settings.settings["geometry"]))
exec('settings.settings["mapcode"] = ' + str(settings.settings["mapcode"]))
root.state(settings.settings["geometry"][0])
root.geometry(settings.settings["geometry"][1])
except Exception as e:
now = datetime.now()
with open("C:\\Users\\" + login + "\\Desktop\\Path finder\\logs\\log-" + str(now.strftime("%d-%m-%Y")) + "&" + str(now.strftime("%H-%M-%S")), "w")as f:
f.write(str(e))
os.startfile("backup.pyw")
exit()
def save():
settings.settings["geometry"][0] = root.state()
settings.settings["geometry"][1] = root.geometry()
settings.save()
root.destroy()
root.protocol("WM_DELETE_WINDOW", save)
grid_frame = Frame(root, bg = bg)
ribbon = Frame(root, height = 70, bg = "#0b0b0d")
ribbon.pack(fill = "x", side = "top")
grid_frame.pack(fill = "both", expand = True)
for x in range(0,720):
exec('\ncell'+str(x)+' = Label(grid_frame, bg = bg, height = 2, width = 4)'+'\n\ncell'+str(x)+'.bind("<Enter>", lambda event: cell'+str(x)+'.config(bg = "#272a2e"))\ncell'+str(x)+'.bind("<Leave>", lambda event: cell'+str(x)+'.config(bg = bg))\n')
class Grid:
def __init__(self):
hover = None
row = 1
column = 1
for x in range(0, 720):
if column == 41:
column = 1
row += 1
exec("cell" + str(x) + ".grid(row = " + str(row) + ", column = " + str(column) + ")")
column += 1
grid = Grid()
loaded = True
root.deiconify()
root.mainloop()