linux下python抓屏實(shí)現(xiàn)方法
本文實(shí)例講述了linux下python抓屏實(shí)現(xiàn)方法。分享給大家供大家參考。具體實(shí)現(xiàn)代碼如下:
#!/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()
希望本文所述對(duì)大家的Python程序設(shè)計(jì)有所幫助。
相關(guān)文章
RuntimeError:CUDA?out?of?memory多種場(chǎng)景下的解決方案
若遇到RuntimeError:?CUDA?out?of?memory錯(cuò)誤,通常意味著GPU內(nèi)存不足以處理當(dāng)前的計(jì)算需求,本文就來介紹一下多種場(chǎng)景下的解決方案,具有一定的參考價(jià)值,感興趣的可以了解一下2024-02-02
Python+KgCaptcha實(shí)現(xiàn)驗(yàn)證碼的開發(fā)詳解
驗(yàn)證碼通常是為了區(qū)分用戶是人還是計(jì)算機(jī),也可以防止解開密碼等惡意行為,而客戶端上多數(shù)會(huì)用在關(guān)鍵操作上。現(xiàn)在驗(yàn)證碼的種類樣式也特別多,本文主要介紹了如何用Python和KgCaptcha做出驗(yàn)證碼功能,需要的可以參考一下2023-04-04
Python深度學(xué)習(xí)之實(shí)現(xiàn)卷積神經(jīng)網(wǎng)絡(luò)
今天帶大家學(xué)習(xí)如何使用Python實(shí)現(xiàn)卷積神經(jīng)網(wǎng)絡(luò),這是個(gè)很難的知識(shí)點(diǎn),文中有非常詳細(xì)的介紹,對(duì)小伙伴們很有幫助,需要的朋友可以參考下2021-06-06
對(duì)python3中的RE(正則表達(dá)式)-詳細(xì)總結(jié)
今天小編就為大家分享一篇對(duì)python3中的RE(正則表達(dá)式)-詳細(xì)總結(jié),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-07-07
一文教你掌握Python中Lambda表達(dá)式的5種實(shí)用技巧
在Python編程的宇宙里,有一個(gè)強(qiáng)大而靈活的工具經(jīng)常被高效的程序員所利用——那就是Lambda表達(dá)式,下面就讓我們深入了解Lambda表達(dá)式的妙用吧2024-01-01
使用Python集合顯著優(yōu)化算法性能的實(shí)戰(zhàn)案例
掌握?Python?中的?set?數(shù)據(jù)結(jié)構(gòu),是算法和數(shù)據(jù)結(jié)構(gòu)的基本功,今天我們從一個(gè)實(shí)戰(zhàn)案例出發(fā),探討如何利用Python集合顯著優(yōu)化算法性能,感興趣的同學(xué)跟著小編一起來探討吧2023-06-06
Python實(shí)現(xiàn)批量合并Excel文件的第二張合并Excel
在數(shù)據(jù)處理和分析中,經(jīng)常需要對(duì)多個(gè)Excel文件進(jìn)行批量操作,特別是當(dāng)這些文件具有相似的結(jié)構(gòu)時(shí),下面我們就來看看Python如何實(shí)現(xiàn)批量合并文件夾下所有Excel文件的第二張表吧2024-03-03
Python按條件刪除Excel表格數(shù)據(jù)的方法(示例詳解)
本文介紹基于Python語言,讀取Excel表格文件,基于我們給定的規(guī)則,對(duì)其中的數(shù)據(jù)加以篩選,將不在指定數(shù)據(jù)范圍內(nèi)的數(shù)據(jù)剔除,保留符合我們需要的數(shù)據(jù)的方法,感興趣的朋友跟隨小編一起看看吧2024-08-08

