title: Tkinter managing my event loops alongside my mainloop
body: <p>I've been slowly learning Tkinter and object-oriented programming but I've programmed myself into a corner with this one. please forgive my lack of critical thinking on this one, but i've asked everyone I know who knows python better than me and we can't get to a working solution here.</p>
  
  <p>I've got a gui app im working on that is meant to allow the user to input stock symbols, create new labels for each symbol, and then update each label periodically. (kinda like a really basic etrade app or something). I've found it's really easy to do this without a gui because I can just say:</p>
  
  <pre><code>while True:
     sPrice = get_stock_price(s)
     print sPrice
  </code></pre>
  
  <p>but i've bound my get_stock_price(s) function to a button, which spawns a sub-frame and a label contained inside it. The problem i've faced is the label will not update. A friend recommended to add another method solely to update the label, however the only way I know how to continuously update it is do a </p>
  
  <pre><code>while True:
      # get new price
      # update the label
      # time.sleep(~1 minute?)
  </code></pre>
  
  <p>this causes my gui window to freeze and spin forever.
  I've been reading up on all the other threads related to this particular situation, and I've seen many different advices; don't call sleep in your main thread, don't use root.update, use events, call root.something.after(500, function) and i've tried to implement. What i've been left with is a frankenstein of code that will still retrieve my stock values, but wont update them, and a few methods that I don't know how to update, or where to call in my code.</p>
  
  <p>What im hoping for is a (potentially long, I know. Sorry!) explanation of what i'm doing wrong, and suggestions on how to fix it. I'm really looking to understand and fix the issue myself, but code-solutions would be awesome so long as they are explained.</p>
  
  <p>Thanks so much in advance!!!</p>
  
  <p>PS: Here is my code so far:</p>
  
  <pre><code>from Tkinter import *
  import urllib
  import re
  import time
  
  class MyApp(object):
      def __init__(self, parent):
          self.myParent = parent
          self.myContainer1 = Frame(parent)
          self.myContainer1.pack()
          self.createWidgets()
          button1 = Button(self.myContainer1, command = self.addStockToTrack)
          self.myContainer1.bind("&lt;Return&gt;", self.addStockToTrack)
          button1.configure(text = "Add Symbol")
          button1.pack()  
  
      def createWidgets(self):
          # title name
          root.title("Stock App")
          # creates a frame inside myContainer1
          self.widgetFrame = Frame(self.myContainer1)
          self.widgetFrame.pack()
          # User enters stock symbol here:
          self.symbol = Entry(self.widgetFrame) 
          self.symbol.pack()
          self.symbol.focus_set()
  
      def addStockToTrack(self):
          s = self.symbol.get()
          labelName = str(s) + "Label"
          self.symbol.delete(0, END)
          stockPrice = get_quote(s)
          self.labelName = Label(self.myContainer1, text = s.upper() + ": " + str(stockPrice))
          self.labelName.pack()
          self.myContainer1.after(500, self.get_quote)
  
      def updateStock(self):
          while True:
              labelName = str(s) + "Label"
              stockPrice = get_quote(s)
              self.labelName = Label(self.myContainer1, text = s.upper() + ": " + str(stockPrice))
              self.labelName.pack()
              time.sleep(10)
  
  def get_quote(symbol):
      base_url = 'http://finance.google.com/finance?q='
      content = urllib.urlopen(base_url + symbol).read()
      m = re.search('id="ref_\d*_l".*?&gt;(.*?)&lt;', content)
      if m:
          quote = m.group(1)
      else:
          quote = 'Not found: ' + symbol
      return quote
  
  root = Tk()
  myapp = MyApp(root)
  root.mainloop()
  </code></pre>