除了打开比较慢,要到文件夹中打开,这些不太方便外,还是挺好用的。
import time
import PyQt5
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
class Widget(QWidget):
def __init__(self,parent=None):
super(Widget ,self).__init__(parent)#Qt.FramelessWindowHint)
#self.setAttribute(Qt.WA_TranslucentBackground, True)
self.palette = QPalette()
self.palette.setColor(QPalette.Window, Qt.lightGray)
self.setPalette(self.palette)
self.desk = QApplication.desktop()
self.qrect = self.desk.screenGeometry()
self.setGeometry(20,20,200,200)
self.pushbutton = QPushButton("开始截屏",self)
self.pushbutton.setGeometry(30,30,160,20)
self.state = 0
self.state2 =0
self.f = 0
self.g = 0
self.pushbutton.clicked.connect(self.start)
self.setMouseTracking(True)
self.label = QLabel()
self.layout = QVBoxLayout()
self.layout.addWidget(self.pushbutton)
self.layout.addWidget(self.label)
self.setLayout(self.layout)
def start(self):
self.state = 1
#self.setAttribute(Qt.WA_TranslucentBackground, True)
self.hide()
self.setGeometry(0,0,self.qrect.width(),self.qrect.height())
time.sleep(0.3)
screen = QGuiApplication.primaryScreen()
self.p = QPixmap(screen.grabWindow(self.desk.winId()))
#self.setPixmap(self.p)
self.palette.setBrush(self.backgroundRole(),
QBrush(self.p))
self.setPalette(self.palette)
self.show()
self.pushbutton.hide()
self.label.hide()
def mousePressEvent(self, e):
if self.state == 1:
self.a = e.globalX()
self.b = e.globalY()
self.state2 = 1
else:
print("未开始截图")
def mouseMoveEvent(self, e):
if (self.state == 1) & (self.state2 == 1):
self.g = e.globalX()
self.f = e.globalY()
self.update()
def paintEvent(self, e):
if (self.state == 1) & (self.state2 == 1):
paint = QPainter(self)
paint.setPen(QPen(Qt.red, 4, Qt.SolidLine))
paint.begin(self)
paint.drawRect(min(self.g, self.a), min(self.f, self.b),
abs(self.a - self.g), abs(self.b - self.f))
paint.end()
def mouseReleaseEvent(self, e):
if self.state == 1 :
self.state2 = 0
self.c = e.globalX()
self.d = e.globalY()
clipboard = QApplication.clipboard()
clipboard.clear()
clipboard.setPixmap(self.p.copy(min(self.a,self.c),min(self.b,self.d),
abs(self.c-self.a),abs(self.d-self.b)))
# palette = QPalette()
# palette.setBrush(self.backgroundRole(),
# QBrush(QPixmap(self.p)))
# self.setGeometry(0,0,c,d)
# self.setPalette(palette)
self.state = 0
#self.setAttribute(Qt.WA_TranslucentBackground, False)
self.palette.setColor(QPalette.Window, Qt.lightGray)
self.setPalette(self.palette)
self.pushbutton.show()
self.label.setPixmap(self.p.copy(min(self.a,self.c),min(self.b,self.d),
abs(self.c-self.a),abs(self.d-self.b)))
self.label.show()
self.setGeometry(20,20, abs(self.c-self.a),abs(self.d-self.b))
else:
print("未开始截图")
if __name__ == '__main__':
import sys
app = QApplication(sys.argv)
wd = Widget()
wd.show()
app.exec_()