title: Multi threading in Tkinter GUI, threads in different classes
body: <p>I'm currently learning the Tkinter GUI programming. And I'm stuck in somewhere in multi threading concept. Even though this topic is discussed several times here, I couldn't catch the concept and apply it to my small sample program. </p>
  
  <p>Below is my code:</p>
  
  <pre><code>from PIL import Image, ImageTk 
  from Tkinter import Tk, Label, BOTH
  from ttk import Frame, Style
  from Tkinter import *
  import time
  
  
  class Widgets(Frame):
  
      def __init__(self, parent):
          Frame.__init__(self, parent)
          self.grid()
          self.parent = parent
          self.initUI(parent)
  
      def initUI(self, parent):
          self.parent.title("Count Numbers")
  
          for r in range(10):
              self.parent.rowconfigure(r, weight=1)    
          for c in range(10):
              self.parent.columnconfigure(c, weight=1)        
  
          self.button1 = Button(parent, text = "count")
          self.button1.grid(row = 1, column = 1, rowspan = 1, columnspan = 2, sticky = W+E+N+S )
          self.button1["command"] = self.countNum
  
          self.button2 = Button(parent, text = "say Hello")
          self.button2.grid(row = 1, column = 7, rowspan = 1, columnspan = 2, sticky = W+E+N+S) 
          self.button2["command"] = PrintHello(self).helloPrint
  
      def countNum(self):
          for i in range(10):
              print i
              time.sleep(2)   
  
  class PrintHello(Frame):
  
      def __init__(self, parent):
          Frame.__init__(self, parent)
          self.grid()
          self.parent = parent
  
      def helloPrint(self):
          print "Hello"
  
  def main():
      root = Tk()
      root.geometry("300x200")
      app = Widgets(root)
      root.mainloop()
  
  if __name__ == '__main__':
      main() 
  </code></pre>
  
  <p><a href="https://i.stack.imgur.com/TGXvM.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/TGXvM.png" alt="enter image description here"></a></p>
  
  <p>The output is a GUI with 2 buttons- first one prints the numbers and second prints "Hello". But on clicking the first button, the GUI gets <strong>frozen</strong> while the numbers are getting printed. And while searching for a solution, I found that 'multi threading' may help. But after several attempts, I couldn't apply multi-threading to my sample program given.</p>