Any quick Python GUI to display live images from Camera
Question: I am trying to display live images from my 1394 camera. Currently my code is
able to obtain images in a loop from the camera and I was looking for any
quick GUI that will update dynamically (as a separate thread). I can do this
in PyQt maybe using QThreads but is there any recommendation or faster way of
doing this?? Here's my code

#Loop capturing frames from camera

    
    
    for frame in range(1,500):
    
    print 'frame:',frame
    
    TIME.sleep(1) #capture frame every second
    
    image_binary    = pycam.cam.RetrieveBuffer()
    
    #convert to PIL Image
    
    pilimg = PIL.Image.frombuffer("L",(cimg.GetCols(),cimg.GetRows()),image_binary,'raw', "RGBA", 0, 1)
        # At this point I want to send my image data to a GUI window and display it
    

Thank you.


Answer: Here's [wxPython](http://www.wxpython.org/) code that will do it...

    
    
    import wx
    from PIL import Image
    
    SIZE = (640, 480)
    
    def get_image():
        # Put your code here to return a PIL image from the camera.
        return Image.new('L', SIZE)
    
    def pil_to_wx(image):
        width, height = image.size
        buffer = image.convert('RGB').tostring()
        bitmap = wx.BitmapFromBuffer(width, height, buffer)
        return bitmap
    
    class Panel(wx.Panel):
        def __init__(self, parent):
            super(Panel, self).__init__(parent, -1)
            self.SetSize(SIZE)
            self.SetBackgroundStyle(wx.BG_STYLE_CUSTOM)
            self.Bind(wx.EVT_PAINT, self.on_paint)
            self.update()
        def update(self):
            self.Refresh()
            self.Update()
            wx.CallLater(15, self.update)
        def create_bitmap(self):
            image = get_image()
            bitmap = pil_to_wx(image)
            return bitmap
        def on_paint(self, event):
            bitmap = self.create_bitmap()
            dc = wx.AutoBufferedPaintDC(self)
            dc.DrawBitmap(bitmap, 0, 0)
    
    class Frame(wx.Frame):
        def __init__(self):
            style = wx.DEFAULT_FRAME_STYLE & ~wx.RESIZE_BORDER & ~wx.MAXIMIZE_BOX
            super(Frame, self).__init__(None, -1, 'Camera Viewer', style=style)
            panel = Panel(self)
            self.Fit()
    
    def main():
        app = wx.PySimpleApp()
        frame = Frame()
        frame.Center()
        frame.Show()
        app.MainLoop()
    
    if __name__ == '__main__':
        main()
    

