1. 程式人生 > >Python 截圖並複製到剪貼簿

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