Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > Python
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.09.2018, 22:53   #1
SadHermit
Новичок
Джуниор
 
Регистрация: 21.09.2018
Сообщений: 1
По умолчанию Рисование кистью

Доброго времени суток, мне нужна помощь в реализации кисти на 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'), 'Карандаш', self)
self.pen.triggered.connect(self.      )



Как бы мне сделать так чтобы в это действие присвоить функцию рисования, и чтобы она работала лишь при нажатии на кнопку.
Может быть есть какие-нибудь бинды для этого, как в 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)



И в итоге я просто присваивал кнопке эту функцию и все отлично работало

Буду безмерно благодарен за ответы, и особенно за примеры решения проблемы, либо примеры реализации кисти, которые не объявлены в ивентах

Последний раз редактировалось SadHermit; 21.09.2018 в 23:05.
SadHermit вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Рисование Alex2012 C# (си шарп) 1 21.10.2011 21:52
Рисование btf Win Api 2 18.09.2011 15:18
Рисование Костян 98 Мультимедиа в Delphi 2 28.05.2011 09:23
Рисование Granus Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 32 30.06.2009 23:23
Рисование... HunterMan Win Api 10 30.04.2008 23:46