title: Using OpenCV with Tkinter
body: <p>I'm writing a program that needs to display a video stream in a Tkinter window. Since there will also be buttons for performing various functions, I'm using grid to organize where everything goes.</p>
  
  <p>The following code, modified from <a href="https://stackoverflow.com/questions/16366857/show-webcam-sequence-tkinter">Show webcam sequence TkInter</a>, works fine on my Raspberry Pi:</p>
  
  <pre><code>import Tkinter as tk
  import cv2
  from PIL import Image, ImageTk
  
  width, height = 800, 600
  cap = cv2.VideoCapture(0)
  
  root = tk.Tk()
  lmain = tk.Label(root)
  lmain.pack()
  
  def show_frame():
      _, frame = cap.read()
      frame = cv2.flip(frame, 1)
      cv2image = cv2.cvtColor(frame, cv2.COLOR_BGR2RGBA)
      img = Image.fromarray(cv2image)
      imgtk = ImageTk.PhotoImage(image=img)
      lmain.imgtk = imgtk
      lmain.configure(image=imgtk)
      lmain.after(10, show_frame)
  
  show_frame()
  root.mainloop()
  </code></pre>
  
  <p>However, combining it with Tkinter doesn't work. (In what follows, I've tried commenting out Display 1, Display 2, and neither.)</p>
  
  <pre><code>import numpy as np
  import cv2
  import Tkinter as tk
  import Image, ImageTk
  
  #Set up GUI
  window = tk.Tk()  #Makes main window
  window.wm_title("Digital Microscope")
  window.config(background="#FFFFFF")
  
  #Graphics window
  imageFrame = tk.Frame(window, width=600, height=500)
  imageFrame.grid(row=0, column=0, padx=10, pady=2)
  
  #Capture video frames
  lmain = tk.Label(imageFrame)
  cap = cv2.VideoCapture(0)
  def show_frame():
      _, frame = cap.read()
      frame = cv2.flip(frame, 1)
      cv2image = cv2.cvtColor(frame, cv2.COLOR_BGR2RGBA)
      img = Image.fromarray(cv2image)
      imgtk = ImageTk.PhotoImage(image=img)
      lmain.imgtk = imgtk
      lmain.configure(image=imgtk)
      lmain.after(10, show_frame) 
  
  tk.Label(imageFrame, image=show_frame()).grid(row=0, column=0, padx=10, pady=2)  #Display 1
  
  
  #Slider window (slider controls stage position)
  sliderFrame = tk.Frame(window, width=600, height=100)
  sliderFrame.grid(row = 600, column=0, padx=10, pady=2)
  
  
  show_frame()  #Display 2
  window.mainloop()  #Starts GUI
  </code></pre>
  
  <p>How can I get the video to display in <code>imageFrame</code>?</p>