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程序设计有所帮助。