Пример #1
0
    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())
Пример #2
0
    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)
Пример #3
0
    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()
Пример #4
0
 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
Пример #5
0
 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)