• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

linux下python抓屏实现方法

python 搞代码 4年前 (2022-01-09) 19次浏览 已收录 0个评论

本文实例讲述了linux下python抓屏实现方法。分享给大家供大家参考。具体实现代码如下:

#!/usr/bin/python'''by zevolo, 2012.12.20'''import gtk.gdkimport gtkimport glibclass 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, x = 0, y = 0):    self.x = x    self.y = yclass MyPoint(MyPair):  def __init__(self, x = 0, y = 0):    MyPair.__init__(self, x, y)class MySize(MyPair):  def __init__(self, w = 0, h = 0):    MyPair.__init__(self, x, 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):    passclass MyCaptureGtk(MyCapture):  def __init__(self):    MyCapture.__init__(self)    self.window = gtk.Window()    self.window.set_default_size(1,1)    s<strong style="color:transparent">本文来源gao@daima#com搞(%代@#码@网&</strong>elf.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, %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, window = None, rect = None, 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, 0, sz[0], sz[1])    print "The size of the window is (%d, %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.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 "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()

希望本文所述对大家的Python程序设计有所帮助。


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:linux下python抓屏实现方法
喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址