def paintEvent(self, event): mouse_pos = self.mapFromGlobal(QtGui.QCursor.pos()) click_pos = None if self.click_position is not None: click_pos = self.mapFromGlobal(self.click_position) qp = QtGui.QPainter(self) # initialize the crosshairs qp.setBrush(QtGui.QColor(0, 0, 0, 1)) qp.setPen(QtCore.Qt.NoPen) qp.drawRect(event.rect()) # Clear the capture area if click_pos is not None: self.rectangle = QtCore.QRect(click_pos, mouse_pos) qp.setCompositionMode(QtGui.QPainter.CompositionMode_Clear) qp.drawRect(self.rectangle) qp.setCompositionMode(QtGui.QPainter.CompositionMode_SourceOver) pen = QtGui.QPen(QtGui.QColor('white'), 3, QtCore.Qt.SolidLine) qp.setPen(pen) # Draw cropping markers at click position if click_pos is not None: # left line qp.drawLine(mouse_pos.x(), click_pos.y(), mouse_pos.x(), mouse_pos.y()) # top line qp.drawLine(click_pos.x(), click_pos.y(), mouse_pos.x(), click_pos.y()) # right line qp.drawLine(click_pos.x(), click_pos.y(), click_pos.x(), mouse_pos.y()) # bottom line qp.drawLine(click_pos.x(), mouse_pos.y(), mouse_pos.x(), mouse_pos.y())
def __init__(self, parent=None): """ Constructor """ super(ScreenCapture, self).__init__(parent) self.click_position = None file_name = datetime.now().strftime('screen_grab_%Y-%m-%d_at_%H.%M.%S.png') self.output_path = os.path.expanduser(r'~/Desktop/%s' % file_name).replace('\\', '/') self.rectangle = QtCore.QRect() self.setWindowFlags(QtCore.Qt.FramelessWindowHint | QtCore.Qt.WindowStaysOnTopHint | QtCore.Qt.CustomizeWindowHint | QtCore.Qt.Tool) self.setAttribute(QtCore.Qt.WA_TranslucentBackground) self.setCursor(QtCore.Qt.CrossCursor) self.setMouseTracking(True) self.set_screen_area() desktop = QtWidgets.QApplication.instance().desktop() desktop.resized.connect(self.set_screen_area) desktop.screenCountChanged.connect(self.set_screen_area)
def paintEvent(self, event): painter = QtWidgets.QStylePainter(self) opt = QtWidgets.QStyleOptionTab() for i in range(self.count()): self.initStyleOption(opt, i) painter.drawControl(QtWidgets.QStyle.CE_TabBarTabShape, opt) painter.save() s = opt.rect.size() s.transpose() r = QtCore.QRect(QtCore.QPoint(), s) r.moveCenter(opt.rect.center()) opt.rect = r c = self.tabRect(i).center() painter.translate(c) painter.rotate(90) painter.translate(-c) painter.drawControl(QtWidgets.QStyle.CE_TabBarTabLabel, opt) painter.restore()
def mouseReleaseEvent(self, event): self.rectangle = QtCore.QRect(self.click_position, event.globalPos()).normalized() self.click_position = None pix = capture_area(self.rectangle, self.output_path) self.close() return pix
def set_screen_area(self): desktop = QtWidgets.QApplication.instance().desktop() total_desktop = QtCore.QRect() for r in range(desktop.screenCount()): total_desktop = total_desktop.united(desktop.screenGeometry(r)) self.setGeometry(total_desktop)