Exemplo n.º 1
0
class GUI(QtWidgets.QMainWindow):
    def __init__(self):
        super().__init__()
        self.setFixedSize(self.size())
        self.show()
        self.points = QtGui.QPolygon()
        self.undoStack = Stack()
        self.redoStack = Stack()
        create_shortcut(self, self.openShortcutEditor, 'Open Shortcut Editor',
                        'ctrl+f')
        create_shortcut(self, self.undo, 'Undo', 'ctrl+z')
        create_shortcut(self, self.redo, 'Redo', 'ctrl+y')
        self.defaultShortcuts = shortcutEditor.windowActionsToDict(self)
        shortcutEditor.loadSavedActions(self)

    def openShortcutEditor(self):
        self.editor = shortcutEditor(self, self.defaultShortcuts)
        self.editor.show()

    def undo(self):
        try:
            self.redoStack.push(self.undoStack.top())
            self.points.remove(self.points.indexOf(self.undoStack.pop()))
            self.repaint()
        except EmptyStackException:
            pass

    def redo(self):
        try:
            self.undoStack.push(self.redoStack.top())
            self.points.append(self.redoStack.pop())
            self.repaint()
        except EmptyStackException:
            pass

    def mousePressEvent(self, e):
        if e.button() == 1:  # left click
            self.points.append(e.pos())
            self.undoStack.push(e.pos())
            self.redoStack.clear()
            self.update()
        elif e.button() == 2:
            self.openShortcutEditor()

    def paintEvent(self, ev):
        qp = QtGui.QPainter(self)
        qp.setRenderHint(QtGui.QPainter.Antialiasing)
        pen = QtGui.QPen(QtCore.Qt.red, 5)
        brush = QtGui.QBrush(QtCore.Qt.red)
        qp.setPen(pen)
        qp.setBrush(brush)
        for i in range(self.points.count()):
            qp.drawEllipse(self.points.point(i), 5, 5)
Exemplo n.º 2
0
def test_stack():
    t = Stack([54, 27])
    print(t.peek())
    t.clear()
    # t.peek()
    t.push(10)
    t.push(15)
    t.push(20)
    print(t)
    t.clear()
    print(t)
    t.push(2)
    print(t)
    print(t.peek())
Exemplo n.º 3
0
class Drawer:
    def __init__(self, getColor, screenshot, parent, offset):
        self.getColor = getColor
        self.parent = parent
        self.offset = offset
        self.resetDrawing(screenshot, offset)

    def resetDrawing(self, screenshot: QtGui.QPixmap, offset: QtCore.QPoint):
        """Called every time the user creates a new AOI."""
        self.image = screenshot.toImage()
        self.offset = offset
        self.drawing = False  # drawing right now
        self.ableToDraw = False  # can drow (is the draw button pressed?)
        self.previousImages = Stack(self.image.copy())
        self.nextImages = Stack()
        self.brushSize = 2
        self.startingPoint = None
        self.lastPoint = QtCore.QPoint()

    def undo(self):
        try:
            self.nextImages.push(self.image.copy())
            self.image = self.previousImages.pop()
            self.parent.repaint()
        except EmptyStackException:
            pass

    def redo(self):
        try:
            old = self.image.copy()
            self.image = self.nextImages.pop().copy()
            self.previousImages.push(old)
            self.parent.repaint()
        except EmptyStackException:
            pass

    def setDrawing(self, value: bool):
        self.drawing = value

    def setAbleToDraw(self, value: bool):
        self.ableToDraw = value

    def startDrawing(self, position):
        if self.ableToDraw:
            self.startingPoint = position
            self.previousImages.push(self.image.copy())
            self.nextImages.clear()
            self.drawing = True
            self.lastPoint = position - self.offset

    def keepDrawing(self, position):
        if self.drawing and self.ableToDraw:
            painter = QPainter(self.image)
            painter.setPen(
                QtGui.QPen(self.getColor(), self.brushSize,
                           QtCore.Qt.SolidLine, QtCore.Qt.RoundCap,
                           QtCore.Qt.RoundJoin))
            if self.startingPoint == position:
                painter.setBrush(self.getColor())
                painter.drawEllipse(position - self.offset, self.brushSize,
                                    self.brushSize)
            else:
                painter.drawLine(self.lastPoint, position - self.offset)
            self.lastPoint = position - self.offset
            self.parent.update()

    def stopDrawing(self, position):
        if self.startingPoint == position:
            self.keepDrawing(position)  # draw a circle
        self.drawing = False
        self.startingPoint = None

    def drawingNow(self):
        return self.drawing and self.ableToDraw