最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

linux下python抓屏实现方法

来源:动视网 责编:小采 时间:2020-11-27 14:41:24
文档

linux下python抓屏实现方法

linux下python抓屏实现方法:本文实例讲述了linux下python抓屏实现方法。分享给大家供大家参考。具体实现代码如下: #!/usr/bin/python '''by zevolo, 2012.12.20 ''' import gtk.gdk import gtk import glib class MyRect(): def __init__
推荐度:
导读linux下python抓屏实现方法:本文实例讲述了linux下python抓屏实现方法。分享给大家供大家参考。具体实现代码如下: #!/usr/bin/python '''by zevolo, 2012.12.20 ''' import gtk.gdk import gtk import glib class MyRect(): def __init__


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

#!/usr/bin/python
'''by zevolo, 2012.12.20
'''
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, x = 0, y = 0):
 self.x = x
 self.y = y
class 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):
 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, %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程序设计有所帮助。

文档

linux下python抓屏实现方法

linux下python抓屏实现方法:本文实例讲述了linux下python抓屏实现方法。分享给大家供大家参考。具体实现代码如下: #!/usr/bin/python '''by zevolo, 2012.12.20 ''' import gtk.gdk import gtk import glib class MyRect(): def __init__
推荐度:
标签: linux python 抓屏
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top