title: Threads and tkinter
body: <p>I've heard that threads in Python are not easy to handle and they become more tangled with tkinter.</p>
  
  <p>I have the following problem. I have two classes, one for the GUI and another for an infinite process. First, I start the GUI class and then the infinite process' class. I want that when you close the GUI, it also finishes the infinite process and the program ends.</p>
  
  <p>A simplified version of the code is the following:</p>
  
  <pre><code>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()
  </code></pre>
  
  <p>When I click in the close button (in the upper right corner) the following error appears in the console:</p>
  
  <pre class="lang-none prettyprint-override"><code>Tcl_AsyncDelete: async handler deleted by the wrong thread
  </code></pre>
  
  <p>I don't know why it happens or what it means.</p>