Как сделать эффект рисования прямоугольника?
Есть задача сделать функцию, в которой на изображении надо нарисовать прямоугольник.
Нужно, чтобы нажатие мыши задавало верхнюю левую точку прямоугольника, а отпускание-конечную. Причем во время этого процесса дорисовывался пунктиром сам прямоугольник.
Подскажите пожалуйста, с помощью какой библиотеки такое можно реализовать (в предпочтениях kivy, но готов написать функционал и на tkinter, и на pyqt5)?
Ответы (1 шт):
Автор решения: S. Nick
→ Ссылка
На PyQt5 это может выглядеть примерно так:
import sys
from PyQt5 import QtCore, QtGui, QtWidgets
class MyWidget(QtWidgets.QWidget):
def __init__(self):
super().__init__()
self.begin = QtCore.QPoint()
self.end = QtCore.QPoint()
self.pix = QtGui.QPixmap('im.png').scaled(QtCore.QSize(660, 620))
def paintEvent(self, event):
qp = QtGui.QPainter(self)
qp.drawPixmap(0, 0, self.pix)
qp.setPen(QtGui.QPen(QtCore.Qt.red, 3, QtCore.Qt.SolidLine))
br = QtGui.QBrush(QtGui.QColor("transparent"))
qp.setBrush(br)
if self.begin and self.end:
rect = QtCore.QRect(self.begin, self.end)
qp.drawRect(rect)
def mousePressEvent(self, event):
if event.button() == QtCore.Qt.LeftButton:
self.begin = event.pos()
self.end = self.begin
self.update()
def mouseMoveEvent(self, event):
if event.buttons() == QtCore.Qt.LeftButton:
self.end = event.pos()
self.update()
def mouseReleaseEvent(self, event):
if event.button() == QtCore.Qt.LeftButton:
painter = QtGui.QPainter(self.pix)
rect = QtCore.QRect(self.begin, self.end)
painter.setPen(QtGui.QPen(QtCore.Qt.blue, 3, QtCore.Qt.SolidLine))
painter.drawRect(rect)
self.begin = self.end = QtCore.QPoint()
self.update()
if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
w = MyWidget()
w.resize(660, 620)
w.show()
sys.exit(app.exec_())
