Как полностью остановить программу на tkinter (python)?
После нажатия на крестик, программа продолжает жрать ЦП и я не знаю, как это исправить, не считая принудительного завершения программы или через PyCharm, или через Диспетчер задач. Пишу программу с помощью библиотеки tkinter и sys.exit() не работает. Может кто-то знает как это починить.
КОД:
import math
import sys
import threading
import mouse
import tkinter as ttk
from tkinter import messagebox as msgbox
class TK(ttk.Tk):
def __init__(self):
super().__init__()
self.btn = ttk.Button(text="ON", command=change)
self.lbl = ttk.Label(text=f"0p (pixels)")
def start_settings(self):
self.geometry("200x300")
self.title("MMC")
def place(self):
self.btn.pack()
self.lbl.pack()
def mainloop(self, n=0):
self.start_settings()
self.place()
super().mainloop(n)
def mileage_count():
global pos_mouse
global distance
while True:
if is_working:
new_pos_mouse = mouse.get_position()
if pos_mouse != new_pos_mouse:
distance += math.hypot(abs(pos_mouse[0] - new_pos_mouse[0]), abs(pos_mouse[1] - new_pos_mouse[1]))
pos_mouse = new_pos_mouse
tk.lbl["text"] = f"{round(distance)}p (pixels)"
else:
pos_mouse = mouse.get_position()
def change():
global is_working
is_working = not is_working
tk.btn["text"] = "OFF" if is_working else "ON"
def on_closing():
global is_working
if msgbox.askokcancel("Quit", "Do you want to quit?"):
is_working = False
tk.destroy()
sys.exit()
tk = TK()
pos_mouse = (0, 0)
is_working = False
distance = 0
if __name__ == "__main__":
thread = threading.Thread(target=mileage_count)
thread.start()
tk.protocol("WM_DELETE_WINDOW", on_closing)
tk.mainloop()