-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathScreenShooter.py
105 lines (77 loc) · 2.43 KB
/
ScreenShooter.py
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
#not needed for lib
import sys
#Import Qt5
from PyQt5 import QtCore, QtGui
from PyQt5.QtWidgets import QApplication, QWidget
from PyQt5.QtCore import Qt
#time
import time
#Lib to make screenshot
import pyscreenshot
#Box
class Box(QWidget):
def __init__(self, colour, opacity):
super().__init__()
#transparency
self.setWindowOpacity(opacity)
#always on top and hite title bar
self.setWindowFlags(Qt.FramelessWindowHint | Qt.WindowStaysOnTopHint)
# setting up the border and colour
self.setStyleSheet(f"border :3px solid {colour}; background-color: {colour};")
#set Geometry
self.setGeometry(0, 0, 0, 0)
#resize self that 2 of it diagonals are on end and begin
def Resize(self, begin, end):
Sub = end - begin
self.setGeometry((Sub.x() < 0)*end.x() + (Sub.x() >= 0)*begin.x(), (Sub.y() < 0)*end.y() + (Sub.y() >= 0)*begin.y(), abs(Sub.x()), abs(Sub.y()))
#screen shooter class
class SS(QWidget):
def __init__(self, colour, opacity):
#Call parent class init
super().__init__()
#set Vars
self.colour = colour
self.opacity = opacity
#always on top and hite title bar
self.setWindowFlags(Qt.FramelessWindowHint | Qt.WindowStaysOnTopHint)
#transparency
self.setWindowOpacity(0)
#opening window in maximized size
self.showFullScreen()
#Set cursor
self.setCursor(Qt.CrossCursor)
#grab mouse
self.grabMouse()
#Get screenshot Flag
#self.img = False
#Position
self.begin = QtCore.QPoint()
self.end = QtCore.QPoint()
#show all widgets
self.show()
#Make screenshot
def ScreenShoot(self):
#Get smaler and greater
x = self.end.x()*(self.end.x() < self.begin.x()) + self.begin.x()*(self.end.x() >= self.begin.x())
y = self.end.y()*(self.end.y() < self.begin.y()) + self.begin.y()*(self.end.y() >= self.begin.y())
return pyscreenshot.grab(bbox=(x, y, self.end.x() + self.begin.x() - x, self.end.y() + self.begin.y() - y))
#handle mouses
def mousePressEvent(self, event):
self.begin = event.pos()
self.end = event.pos()
self.Box = Box(self.colour, self.opacity)
self.Box.show()
def mouseMoveEvent(self, event):
self.end = event.pos()
self.Box.Resize(self.begin, self.end)
def mouseReleaseEvent(self, event):
self.Box.close()
#take screenshoot
#self.img = self.ScreenShoot()
self.close()
#I wonder what it does? Time is "adjusted" for 30fps
def MakeScreenShoot(colour, opacity):
app = QApplication(sys.argv)
ex = SS(colour, opacity)
app.exec()
return ex.ScreenShoot()