python3.5
Мне нужен графический интерфейс и поток для обработки тяжелых вычислений. поток выводит некоторую информацию о состоянии, зависит от результата вычисления. Теперь я попробую приведенный ниже код, кажется, работает нормально. но когда я нажимаю кнопку закрытия (x) окна, графический интерфейс зависает.
import tkinter as tk
import threading
import time
import tkinter.scrolledtext as scrolledtext
class GUI:
def __init__(self, master):
self.master = master
self.scrolledtext = scrolledtext.ScrolledText()
self.scrolledtext['font'] = ('consolas', '12')
self.scrolledtext.pack(expand=True, fill='both')
self.scrolledtext.insert(tk.END, "test\n")
self.master.protocol("WM_DELETE_WINDOW", self.closeme)
self.threadTask = ThreadedTask(self.scrolledtext)
self.threadTask.start()
def closeme(self):
self.threadTask.stop()
self.threadTask.join()
self.master.destroy()
class ThreadedTask(threading.Thread):
def __init__(self,scrolledtext):
threading.Thread.__init__(self)
self.scrolledtext = scrolledtext
self._stop_event = threading.Event()
def stop(self):
self._stop_event.set()
def run(self):
while(not self._stop_event.is_set()):
time.sleep(1)
# to do: something heavy computation....
self.scrolledtext.insert(tk.END, "123\n")
self._stop_event.wait(1)
root = tk.Tk()
root.title("Test")
main_ui = GUI(root)
root.mainloop()