Мне нужна помощь с реализацией кисти на PyQt5. У меня уже есть некоторый код события для мыши:
def mousePressEvent(self, event):
if event.button() and event.button() == Qt.LeftButton:
self.lastPoint = event.pos()
self.scribbling = True
def mouseMoveEvent(self, event):
if (event.buttons() & Qt.LeftButton) and self.scribbling:
self.drawLineTo(event.pos())
def mouseReleaseEvent(self, event):
if event.button() == Qt.LeftButton and self.scribbling:
self.drawLineTo(event.pos())
self.scribbling = False
Внутри которого объявлена функция рисования кисти:
def drawLineTo(self, endPoint):
painter = QPainter(self.image)
painter.setPen(QPen(self.myPenColor, self.myPenWidth, Qt.SolidLine,
Qt.RoundCap, Qt.RoundJoin))
painter.drawLine(self.lastPoint, endPoint)
self.modified = True
rad = self.myPenWidth / 2 + 2
self.update(QRect(self.lastPoint, endPoint).normalized().adjusted(-rad, -rad, +rad, +rad))
self.lastPoint = QPoint(endPoint)
Но главная проблема в том, что эта функция объявлена в самих событиях.Поэтому рисование идет сразу, и я не могу добавить другие инструменты.Потому что вместе с ними «карандаш» будет постоянно рисоваться.Но мне нужно как-то вытащить оттуда функцию и назначить ее соответствующей кнопке.Чтобы включить только нажав на эту кнопку.Допустим, у меня есть какая-то панель инструментов:
toolbar = self.addToolBar('Инструменты')
toolbar.addAction(self.pen)
Для которой есть действие:
self.pen = QAction(QIcon('Image/pen.png'), 'Pencil', self)
self.pen.triggered.connect(self. )
Как мне это сделать в «triggered.connect» назначить функцию рисования, ичто он работает только при нажатии кнопки.Может быть, для этого есть некоторые связи, как в tkinter, в сходстве:
def draw_pen(self):
self.parent.config(cursor="arrow")
self.parent.unbind("<Button-1>")
self.parent.unbind("<Motion>")
self.parent.bind("<ButtonPress-1>", self.button_press)
self.parent.bind('<B1-Motion>', self.draw_pencil_move)
self.parent.bind('<ButtonRelease-1>', self.draw_pencil_release)
И, в конце концов, я просто назначил эту функцию кнопке, и все работало нормально
Я буду очень благодарен за ответы и особенно за примеры решения проблем или примеры кистей, которые не объявлены в событиях
PS Я прошу прощения за мой английский, если что-то не так с: