香港云主机最佳企业级服务商!

ADSL拨号VPS包含了中国大陆(联通,移动,电信,)

中国香港,国外拨号VPS。

当前位置:云主机 > python >

电信ADSL拨号VPS
联通ADSL拨号VPS
移动ADSL拨号VPS

linux下python抓屏实现方法


时间:2021-12-08 14:47 作者:admin


本文实例讲述了linux下python/' target='_blank'>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)    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, %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程序设计有所帮助。

(责任编辑:admin)






帮助中心
会员注册
找回密码
新闻中心
快捷通道
域名登录面板
虚机登录面板
云主机登录面板
关于我们
关于我们
联系我们
联系方式

售前咨询:17830004266(重庆移动)

企业QQ:383546523

《中华人民共和国工业和信息化部》 编号:ICP备00012341号

Copyright © 2002 -2018 香港云主机 版权所有
声明:香港云主机品牌标志、品牌吉祥物均已注册商标,版权所有,窃用必究

云官方微信

在线客服

  • 企业QQ: 点击这里给我发消息
  • 技术支持:383546523

  • 公司总台电话:17830004266(重庆移动)
  • 售前咨询热线:17830004266(重庆移动)