加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

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】收集整理供大家参考研究

如果以上内容对您有帮助,欢迎收藏、点赞、推荐、分享。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读