title: Pause matplotlib custom animation loop
body: <p>I want to pause an animation that I'm running in my own event loop. Here is a simplified version of the code:</p>
  
  <pre><code>import numpy as np
  import matplotlib.pyplot as plt
  from matplotlib.widgets import Button
  from mpl_toolkits.mplot3d import proj3d
  
  import time
  
  def main():
      global paused
      paused = False
  
      fig = plt.figure()
      ax = fig.add_subplot(111, projection='3d')
  
      ax.set_ylim(-100, 100)
      ax.set_xlim(-10, 10)
      ax.set_zlim(-100, 100)
  
      plt.ion()
      plt.show()
  
      def pause_anim(event):
          global paused
          paused = not paused
  
      pause_ax = fig.add_axes((0.7, 0.03, 0.1, 0.04))
      pause_button = Button(pause_ax, 'pause', hovercolor='0.975')
      pause_button.on_clicked(pause_anim)
  
      x = np.arange(-50, 51)
  
      line = ax.plot([], [], [], c="r")[0]
  
      y_range = list(np.arange(1, 60, 3))
      y_len = len(y_range)
      idx = 0
  
      while True:
  
          if not paused:
              idx += 1
              if idx &gt;= y_len:
                  break
  
              y = y_range[idx]
              z = - x**2 + y - 100
  
              line.set_data(x, 0)
              line.set_3d_properties(z)
  
              plt.draw()
              plt.pause(0.2)
  
          else:
              time.sleep(1)  # this stops button events from happening
              #input("Shoop?")  # prompting for input works
              # I've also tried putting a mutex here
  
  if __name__ == '__main__':
      main()
  </code></pre>
  
  <p>As I mention in the code, I've tried <code>time.sleep</code> and <code>Lock</code>, but these stop me from unpausing once I've paused. How can I pause the loop without breaking the ability to resume the animation?</p>