title: non blocking info dialog in Tkinter
body: <p>I need a simple info box to display some status output, that I would alternatively dump to the console using <code>print</code>. The easiest possibility that I found is the following:</p>
  
  <pre><code>import Tkinter as tk
  root = tk.Tk()
  root.withdraw()
  
  from tkMessageBox import showinfo    
  showinfo('some caption', 'some info')
  </code></pre>
  
  <p>The only problem with this implementation is that my program (<strong>not written in Tkinter</strong>) will not continue running, until the 'ok' button of the <code>showinfo</code> messagebox is pressed. That is, the <code>showinfo</code> dialog will block.</p>
  
  <p><strong>Therefore my question:</strong> Is there a simple way to make <code>showinfo</code> non-blocking? Are there alternative messagebox implementations in Tkinter that are non-blocking? I can think of the typical use-cage of showing a help page - the window should open and the main program keeps on running normally.</p>
  
  <p><strong>EDIT1:</strong> here's a simple help window that I came up with, but unfortunately it doesn't show up, unless I launch a different <code>tkMessageBox</code> or a similar object:</p>
  
  <pre><code>class TextInfo(object):
  
      def __init__(self, parent, window_title = 'window', textfield = 'a text field', label = None):
  
          self.top = tk.Toplevel(parent)
          self.parent = parent
          self.window_title = window_title
          self.textfield = textfield
  
          # set window title
          if window_title:
              self.top.title(window_title)
  
          # add label if given
          if label:
              tk.Label(self.top, text=window_title).grid(row=0)
  
          # create the text field
          self.textField = tk.Text(self.top, width=80, height=20, wrap=tk.NONE)
          if textfield:
              self.textField.insert(1.0, textfield)
          self.textField.grid(row=1)
  
          # create the ok button
          b = tk.Button(self.top, text="OK", command=self.ok)
          b.grid(row=2)
  
      def ok(self):
          self.top.destroy()
  </code></pre>
  
  <p>And this is how I call the window:</p>
  
  <pre><code>root = tk.Tk()
  root.withdraw()
  TextInfo(self.root, window_title, textfield, label)  
  # don't call root.mainloop() here, because this will lead to blocking.
  </code></pre>
  
  <p>Is there some kind of property or event that I need to set for the window to show up? If I call <code>root.mainloop()</code> the window will show up, but then my GUI is blocked again.</p>