linux下python抓屏实现方法
本文实例讲述了linux下python抓屏实现方法。分享给大家供大家参考。具体实现代码如下:
#!/usr/bin/python '''byzevolo,2012.12.20 ''' importgtk.gdk importgtk importglib classMyRect(): def__init__(self,x=0,y=0,w=0,h=0): self.x=x self.y=y self.w=w self.h=h def__init__(self,x,y): self.x=min(int(x.x),int(y.x)) self.y=min(int(x.y),int(y.y)) self.w=abs(int(y.x-x.x)) self.h=abs(int(y.y-x.y)) classMyPair(): def__init__(self,x=0,y=0): self.x=x self.y=y classMyPoint(MyPair): def__init__(self,x=0,y=0): MyPair.__init__(self,x,y) classMySize(MyPair): def__init__(self,w=0,h=0): MyPair.__init__(self,x,y) classMyCapture(): (event_enter,event_leave)=(0,1) def__init__(self): pass defcapture(self): pass defhandleEvent(self,event): ifevent==event_enter: enterSnap() elifevent==event_leave: leaveSnap() defenterSnap(self): pass defleaveSnap(self): pass defsnap(self,window=None,rect=None,name=None): pass classMyCaptureGtk(MyCapture): def__init__(self): MyCapture.__init__(self) self.window=gtk.Window() self.window.set_default_size(1,1) self.window.connect("button-press-event",self.button_press_cb) self.first=None self.second=None self.window.show() #self.window.set_events(gtk.gdk.BUTTON_PRESS_MASK) defgetWindow(self): returnself.window defbutton_press_cb(self,widget,event): #print"typeis%d"%event.type ifevent.type==gtk.gdk.BUTTON_PRESS: ifevent.button==1:#leftbutton print"(%d,%d),(%d,%d),buttonis%d"%(event.x_root,event.y_root,event.x,event.y,event.button) ifnotself.first: self.first=MyPoint(event.x_root,event.y_root) else: self.second=MyPoint(event.x_root,event.y_root) self.snap(None,MyRect(self.first,self.second)) self.first=None elifevent.button==3:#rightbutton self.uncapture() else: pass defuncapture(self): ifself.first: print"cancel" self.first=None else: print"exitnow" gtk.gdk.pointer_ungrab() gtk.mainquit() defcapture(self,time=0L): cursor=gtk.gdk.Cursor(gtk.gdk.display_get_default(),gtk.gdk.CROSSHAIR) ret=gtk.gdk.pointer_grab(self.window.window,True, gtk.gdk.BUTTON_PRESS_MASK, None,cursor,time) ifret==gtk.gdk.GRAB_SUCCESS: print"leftbuttonstart,end,rightbuttoncancel/exit" else: print"failedtocapture%d,(viewable%d),(frozen%d),(already%d)"\ %(ret,gtk.gdk.GRAB_NOT_VIEWABLE,gtk.gdk.GRAB_FROZEN,gtk.gdk.GRAB_ALREADY_GRABBED) defsnap(self,window=None,rect=None,name=None): w=window ifnotwindow: #w=gtk.gdk.get_default_root_window() d=gtk.gdk.display_get_default() w=d.get_default_screen().get_root_window() r=rect ifnotr: sz=w.get_size() r=MyRect(0,0,sz[0],sz[1]) print"Thesizeofthewindowis(%d,%d,%d,%d)"%(r.x,r.y,r.w,r.h) n=name ifnotn: n="screenshot.png" buf=gtk.gdk.Pixbuf(gtk.gdk.COLORSPACE_RGB,False,8,r.w,r.h) buf=buf.get_from_drawable(w,w.get_colormap(),r.x,r.y,0,0,r.w,r.h) if(buf!=None): buf.save(n,"png") print"Screenshotsavedto%s."%n else: print"Unabletogetthescreenshot." deftimeout(data): #print"timeout" data.capture() if__name__=='__main__': cap=MyCaptureGtk() w=cap.getWindow() w.show() glib.timeout_add_seconds(1,timeout,cap) #cap.snap() gtk.main()
希望本文所述对大家的Python程序设计有所帮助。