linux下python抓屏小程序
发布时间:2020-12-17 17:19:06 所属栏目:Python 来源:网络整理
导读:今天PHP站长网 52php.cn把收集自互联网的代码分享给大家,仅供参考。 #!/usr/bin/python''' ''' import gtk.gdkimport gtkimport glib class MyRect(): def __init__(self,x = 0,y = 0,w = 0,h = 0): self.x = x self.y =
以下代码由PHP站长网 52php.cn收集自互联网 现在PHP站长网小编把它分享给大家,仅供参考 #!/usr/bin/python ''' ''' import gtk.gdk import gtk import glib class MyRect(): 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)) class MyPair(): def __init__(self,y = 0): self.x = x self.y = y class MyPoint(MyPair): def __init__(self,y = 0): MyPair.__init__(self,y) class MySize(MyPair): def __init__(self,h = 0): MyPair.__init__(self,y) class MyCapture(): (event_enter,event_leave) = (0,1) def __init__(self): pass def capture(self): pass def handleEvent(self,event): if event == event_enter: enterSnap() elif event == event_leave: leaveSnap() def enterSnap(self): pass def leaveSnap(self): pass def snap(self,window = None,rect = None,name = None): pass class MyCaptureGtk(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) def getWindow(self): return self.window def button_press_cb(self,widget,event): #print "type is %d" % event.type if event.type == gtk.gdk.BUTTON_PRESS: if event.button == 1: #left button print "(%d,%d),(%d,button is %d" % (event.x_root,event.y_root,event.x,event.y,event.button) if not self.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 elif event.button == 3: #right button self.uncapture() else: pass def uncapture(self): if self.first: print "cancel" self.first = None else: print "exit now" gtk.gdk.pointer_ungrab() gtk.mainquit() def capture(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) if ret == gtk.gdk.GRAB_SUCCESS: print "left button start,end,right button cancel/exit" else: print "failed to capture %d,(viewable %d),(frozen %d),(already %d)" % (ret,gtk.gdk.GRAB_NOT_VIEWABLE,gtk.gdk.GRAB_FROZEN,gtk.gdk.GRAB_ALREADY_GRABBED) def snap(self,name = None): w = window if not window: #w = gtk.gdk.get_default_root_window() d = gtk.gdk.display_get_default() w = d.get_default_screen().get_root_window() r = rect if not r: sz = w.get_size() r = MyRect(0,sz[0],sz[1]) print "The size of the window is (%d,%d,%d)" % (r.x,r.y,r.w,r.h) n = name if not n: n = "screenshot.png" buf = gtk.gdk.Pixbuf(gtk.gdk.COLORSPACE_RGB,False,8,r.h) buf = buf.get_from_drawable(w,w.get_colormap(),r.x,r.h) if (buf != None): buf.save(n,"png") print "Screenshot saved to %s." % n else: print "Unable to get the screenshot." def timeout(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() 以上内容由PHP站长网【52php.cn】收集整理供大家参考研究 如果以上内容对您有帮助,欢迎收藏、点赞、推荐、分享。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |