清华大佬耗费三个月吐血整理的几百G的资源,免费分享!....>>>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 | #!/usr/bin/python ''' ''' 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() |