Skip to content

Instantly share code, notes, and snippets.

@paulwinex
Created March 5, 2018 13:15
Show Gist options
  • Save paulwinex/57932f5b067efcbbab2594eb99f523bf to your computer and use it in GitHub Desktop.
Save paulwinex/57932f5b067efcbbab2594eb99f523bf to your computer and use it in GitHub Desktop.
from PySide.QtCore import *
from PySide.QtGui import *
import sys
regionColor = QColor(200,200,200)
textColor = QColor(0,0,0)
bgColor = QColor(200,200,200)
class captureRegionClass(QWidget):
endSelectionSignal = Signal(QPixmap)
def __init__(self):
super(captureRegionClass, self).__init__()
self.setWindowFlags( Qt.WindowStaysOnTopHint | Qt.FramelessWindowHint)
scr = QApplication.desktop()
w = scr.winId()
rec = QRect(0,0,scr.width(), scr.height())
self.pix = QPixmap.grabWindow(w,0,0,scr.width(), scr.height())
self.setGeometry(rec)
self.startPos = None
self.endPos= None
def showEvent(self, event):
QApplication.setOverrideCursor(QCursor(Qt.CrossCursor))
super(captureRegionClass, self).showEvent(event)
def paintEvent(self, event):
super(captureRegionClass, self).paintEvent(event)
painter = QPainter()
painter.begin(self)
painter.drawPixmap(0, 0, self.pix)
if self.startPos and self.endPos:
# draw frame
painter.setCompositionMode(QPainter.RasterOp_SourceXorDestination)
painter.setPen(QPen( QBrush(regionColor), 1 ))
rec = QRect(self.startPos, self.endPos).normalized ()
painter.drawRect(rec)
# text bg
bgPos1 = rec.topLeft() + QPoint(0, -5)
bgPos2 = bgPos1 + QPoint(60, -18)
painter.setCompositionMode(QPainter.CompositionMode_SourceOver)
bgRec = QRect(bgPos1, bgPos2)
brush = QBrush(bgColor)
painter.fillRect(bgRec, brush)
# text
textPos = rec.topLeft() - QPoint(-4, 10)
painter.setPen(QPen( QBrush(textColor), 1 ))
painter.drawText(textPos, '%s x %s' % (rec.width(), rec.height()))
painter.end()
def mousePressEvent(self, event):
if event.button() == Qt.LeftButton:
self.startPos = event.pos()
self.endPos = event.pos()
super(captureRegionClass, self).mousePressEvent(event)
def mouseReleaseEvent(self, event):
if event.button() == Qt.LeftButton:
QApplication.restoreOverrideCursor()
self.sendImage()
super(captureRegionClass, self).mouseReleaseEvent(event)
def mouseMoveEvent(self, event):
self.endPos = event.pos()
self.repaint()
super(captureRegionClass, self).mouseMoveEvent(event)
def keyPressEvent(self, event):
if event.key() == Qt.Key_Escape:
QApplication.restoreOverrideCursor()
self.hide()
def cutRegion(self, region):
path = QFileDialog.getSaveFileName(self,'Save file to...', '', ("Images JPG (*.jpg)"))
if path[0]:
cut = self.pix.copy(region)
cut.save(path[0], 'JPG', 90)
self.hide()
def getRegion(self):
if self.region:
cut = self.pix.copy(self.region)
return cut
def saveRegion(self):
self.region = QRect(self.startPos, self.endPos).normalized()
def sendImage(self):
self.hide()
region = QRect(self.startPos, self.endPos).normalized()
cut = self.pix.copy(region)
self.endSelectionSignal.emit(cut)
self.pix = None
if __name__ == '__main__':
app = QApplication([])
grabber = captureRegionClass()
grabber.show()
app.exec_()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment