Python 截图并复制到剪贴板

除了打开比较慢,要到文件夹中打开,这些不太方便外,还是挺好用的。

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_()

猜你喜欢

转载自blog.csdn.net/qianshishangdi/article/details/82584710