Desenhando com um pincel
Preciso de ajuda com a implementação do pincel no PyQt5. Já tenho algum código de evento para o mouse:
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
Dentro do qual a função de desenho do pincel é declarada:
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)
Mas o principal problema é que essa função é declarada nos próprios eventos. Portanto, o desenho ocorre imediatamente e não posso adicionar outras ferramentas. Porque junto com eles o "lápis" será constantemente desenhado. Mas, de alguma forma, preciso retirar a função de lá e atribuí-la ao botão correspondente. Para incluir apenas clicando neste botão. Digamos que eu tenha uma barra de ferramentas:
toolbar = self.addToolBar('Инструменты')
toolbar.addAction(self.pen)
Para o qual existe uma ação:
self.pen = QAction(QIcon('Image/pen.png'), 'Pencil', self)
self.pen.triggered.connect(self. )
Como eu faria isso no "triggered.connect" atribui a função de desenho, e que ela funciona apenas quando o botão é clicado. Talvez haja alguns vínculos para isso, como no tkinter, na semelhança:
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)
E, no final, acabei de atribuir essa função ao botão, e tudo funcionou bem
Serei muito grato por respostas e especialmente por exemplos de solução de problemas ou exemplos de pincéis que não são declarados nos eventos
P.S. Peço desculpas pelo meu inglês, se algo estiver errado с: