#!/usr/bin/env python # coding=utf-8 # # View a PD100 ipcam # Requires pd100.py # # Author: Patrick Salecker # URL: http://www.salecker.org/software/pd100/en # Last modified: 06.12.2009 import sys import gtk import gobject import pd100 class Viewer(): def __init__(self): self.gtkwin=gtk.Window(gtk.WINDOW_TOPLEVEL) self.gtkwin.set_position(gtk.WIN_POS_CENTER) self.gtkwin.set_title("pd100 viewer") self.gtkwin.connect("destroy", self.destroy) self.gtkwin.show() self.da=gtk.DrawingArea() self.da.connect("expose_event", self.expose_image) self.da.show() self.da_size=False self.gtkwin.add(self.da) gobject.threads_init() self.pd100_thread=pd100.MainThread() self.pd100_thread.start() gobject.timeout_add(100, self.update_image) def expose_image(self,widget,event=None): #print "expose" if self.pd100_thread.is_ready(): jpeg=self.pd100_thread.get_jpeg() if len(jpeg)==0: return loader = gtk.gdk.PixbufLoader("jpeg") loader.write(jpeg) loader.close() pixbuf = loader.get_pixbuf() if self.da_size is False: self.da.set_size_request(pixbuf.get_width(), pixbuf.get_height()) self.da_size=True ctx=widget.window.cairo_create() ctx.set_source_pixbuf(pixbuf,0,0) ctx.paint() def update_image(self): if self.da.window!=None: self.expose_image(self.da) return True def destroy(self,bla=None): print "Viewer Exit" self.pd100_thread.stop() sys.exit() if __name__ == '__main__': win=Viewer() try: gtk.main() except KeyboardInterrupt: win.destroy()