title: On-Demand Python Thread Start/Join Freezing Up from wxPython GUI
body: <p>I'm attempting to build a very simple wxPython GUI that monitors and displays external data.  There is a button that turns the monitoring on/off.  When monitoring is turned on, the GUI updates a couple of wx StaticLabels with real-time data.  When monitoring is turned off, the GUI idles.</p>
  
  <p>The way I tried to build it was with a fairly simple Python Thread layout.  When the 'Start Monitoring' button is clicked, the program spawns a thread that updates the labels with real-time information.  When the 'Stop Monitoring' button is clicked, thread.join() is called, and it should stop.</p>
  
  <p>The start function works and the real-time data updating works great, but when I click 'Stop', the whole program freezes.  I'm running this on Windows 7 64-bit, so I get the usual "This Program has Stopped Responding" Windows dialog.</p>
  
  <p>Here is the relevant code:</p>
  
  <pre><code>class MonGUI(wx.Panel):
      def __init__(self, parent):
          wx.Panel.__init__(self, parent)
          ...
          ... other code for the GUI here ...
          ...
          # Create the thread that will update the VFO information
          self.monThread = Thread(None, target=self.monThreadWork)
          self.monThread.daemon = True
          self.runThread = False
  
      def monThreadWork(self):
          while self.runThread:
              ...
              ... Update the StaticLabels with info
              ... (This part working)
              ...
  
      # Turn monitoring on/off when the button is pressed.
      def OnClick(self, event):
          if self.isMonitoring:
              self.button.SetLabel("Start Monitoring")
              self.isMonitoring = False
              self.runThread = False
              self.monThread.join()
          else:
              self.button.SetLabel("Stop Monitoring")
              self.isMonitoring = True
  
              # Start the monitor thread!
              self.runThread = True
              self.monThread.start()
  </code></pre>
  
  <p>I'm sure there is a better way to do this, but I'm fairly new to GUI programming and Python threads, and this was the first thing I came up with.</p>
  
  <p>So, why does clicking the button to stop the thread make the whole thing freeze up?</p>