首页 > 编程 > Python > 正文

linux下python抓屏实现方法

2020-01-04 18:10:43
字体:
来源:转载
供稿:网友

这篇文章主要介绍了linux下python抓屏实现方法,涉及Python操作屏幕截取的相关技巧,需要的朋友可以参考下

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

 

 
  1. #!/usr/bin/python 
  2. '''''by zevolo, 2012.12.20 
  3. ''' 
  4. import gtk.gdk 
  5. import gtk 
  6. import glib 
  7. class MyRect(): 
  8. def __init__(self, x = 0, y = 0, w = 0, h = 0): 
  9. self.x = x 
  10. self.y = y 
  11. self.w = w 
  12. self.h = h 
  13. def __init__(self, x, y): 
  14. self.x = min(int(x.x), int(y.x)) 
  15. self.y = min(int(x.y), int(y.y)) 
  16. self.w = abs(int(y.x - x.x)) 
  17. self.h = abs(int(y.y - x.y)) 
  18. class MyPair(): 
  19. def __init__(self, x = 0, y = 0): 
  20. self.x = x 
  21. self.y = y 
  22. class MyPoint(MyPair): 
  23. def __init__(self, x = 0, y = 0): 
  24. MyPair.__init__(self, x, y) 
  25. class MySize(MyPair): 
  26. def __init__(self, w = 0, h = 0): 
  27. MyPair.__init__(self, x, y) 
  28. class MyCapture(): 
  29. (event_enter, event_leave) = (01
  30. def __init__(self): 
  31. pass 
  32. def capture(self): 
  33. pass 
  34. def handleEvent(self, event): 
  35. if event == event_enter: 
  36. enterSnap() 
  37. elif event == event_leave: 
  38. leaveSnap() 
  39. def enterSnap(self): 
  40. pass 
  41. def leaveSnap(self): 
  42. pass 
  43. def snap(self, window = None, rect = None, name = None): 
  44. pass 
  45. class MyCaptureGtk(MyCapture): 
  46. def __init__(self): 
  47. MyCapture.__init__(self
  48. self.window = gtk.Window() 
  49. self.window.set_default_size(1,1
  50. self.window.connect("button-press-event"self.button_press_cb) 
  51. self.first = None 
  52. self.second = None 
  53. self.window.show() 
  54. #self.window.set_events(gtk.gdk.BUTTON_PRESS_MASK) 
  55. def getWindow(self): 
  56. return self.window 
  57. def button_press_cb(self, widget, event): 
  58. #print "type is %d" % event.type 
  59. if event.type == gtk.gdk.BUTTON_PRESS: 
  60. if event.button == 1#left button 
  61. print "(%d, %d), (%d, %d), button is %d" % (event.x_root, event.y_root, event.x, event.y, event.button) 
  62. if not self.first: 
  63. self.first = MyPoint(event.x_root, event.y_root) 
  64. else
  65. self.second = MyPoint(event.x_root, event.y_root) 
  66. self.snap(None, MyRect(self.first, self.second)) 
  67. self.first = None 
  68. elif event.button == 3#right button 
  69. self.uncapture() 
  70. else
  71. pass 
  72. def uncapture(self): 
  73. if self.first: 
  74. print "cancel" 
  75. self.first = None 
  76. else
  77. print "exit now" 
  78. gtk.gdk.pointer_ungrab() 
  79. gtk.mainquit() 
  80. def capture(self, time = 0L): 
  81. cursor = gtk.gdk.Cursor(gtk.gdk.display_get_default(), gtk.gdk.CROSSHAIR) 
  82. ret = gtk.gdk.pointer_grab(self.window.window, True
  83. gtk.gdk.BUTTON_PRESS_MASK, 
  84. None, cursor, time) 
  85. if ret == gtk.gdk.GRAB_SUCCESS: 
  86. print "left button start, end, right button cancel/exit" 
  87. else
  88. print "failed to capture %d, (viewable %d),(frozen %d), (already %d)" / 
  89. % (ret, gtk.gdk.GRAB_NOT_VIEWABLE, gtk.gdk.GRAB_FROZEN, gtk.gdk.GRAB_ALREADY_GRABBED) 
  90. def snap(self, window = None, rect = None, name = None): 
  91. w = window 
  92. if not window: 
  93. #w = gtk.gdk.get_default_root_window() 
  94. d = gtk.gdk.display_get_default() 
  95. w = d.get_default_screen().get_root_window() 
  96. r = rect 
  97. if not r: 
  98. sz = w.get_size() 
  99. r = MyRect(00, sz[0], sz[1]) 
  100. print "The size of the window is (%d, %d, %d, %d)" % (r.x, r.y, r.w, r.h) 
  101. n = name 
  102. if not n: 
  103. n = "screenshot.png" 
  104. buf = gtk.gdk.Pixbuf(gtk.gdk.COLORSPACE_RGB,False,8, r.w, r.h) 
  105. buf = buf.get_from_drawable(w,w.get_colormap(), r.x, r.y, 00, r.w, r.h) 
  106. if (buf != None): 
  107. buf.save(n, "png"
  108. print "Screenshot saved to %s." % n 
  109. else
  110. print "Unable to get the screenshot." 
  111. def timeout(data): 
  112. #print "timeout" 
  113. data.capture() 
  114. if __name__ == '__main__'
  115. cap = MyCaptureGtk() 
  116. w = cap.getWindow() 
  117. w.show() 
  118. glib.timeout_add_seconds(1, timeout, cap) 
  119. #cap.snap() 
  120. gtk.main() 

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

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表