I am drawing using pyqt and I am using QGraphicsView and QGraphicsScene but the line I draw is visibale only after I release the left mouse button, I want to see the line while I am drawing like in any paint program
class Window(QWidget):
def __init__(self):
super().__init__()
self.setGeometry(400, 100, 1000, 800)
self.setWindowTitle('Painter')
self.background_color = '#242423'
layout = QVBoxLayout(self)
# create view
view = View()
global scene
scene = QGraphicsScene()
scene.setBackgroundBrush(QBrush(QColor(self.background_color)))
scene.setSceneRect(0, 0, 150, 150)
# add view to layout
layout.addWidget(view)
# add scene to view
view.setScene(scene)
class View(QGraphicsView):
def __init__(self):
super().__init__()
self.pen = QPen()
self.pen.setColor(Qt.red)
self.start = QPoint()
self.end = QPoint()
self.setMouseTracking(True)
def mousePressEvent(self, event):
if event.button() == Qt.LeftButton:
self.start = self.mapToScene(event.pos())
def mouseMoveEvent(self,event) :
if event.buttons() & Qt.LeftButton:
self.end = self.mapToScene(event.pos())
def mouseReleaseEvent(self, event) :
if event.button() == Qt.LeftButton:
if self.start.x() == self.end.x() and self.start.y() == self.end.y():
pass
# if height and width is less than 20 draw line else draw rect
elif abs(self.end.x() - self.start.x()) < 20 or abs(self.end.y() - self.start.y()) < 20:
# draw vertical line
if abs(self.end.y() - self.start.y()) < 20:
scene.addLine(self.start.x(), self.start.y(), self.end.x(),
self.start.y(),self.pen)
else:
# draw horizontal line
scene.addLine(self.start.x(), self.start.y(), self.start.x() - self.end.x() + self.end.x(),
self.end.y(),self.pen)
if __name__ == '__main__':
app = QApplication([])
window = Window()
window.show()
app.exec()