import sys import time from PyQt5.QtWidgets import QWidget, QApplication, QLabel, QGraphicsView, QGraphicsScene,QPushButton, QVBoxLayout, QGraphicsLineItem from PyQt5.QtGui import QPainter, QColor, QFont, QPen from PyQt5.QtCore import Qt, QRectF, QPointF, QLineF class Window(QWidget): def __init__(self): super().__init__() self.View = ViewDT(self) self.button = QPushButton('Clear', self) self.button.clicked.connect(self.handleClearView) layout = QVBoxLayout(self) layout.addWidget(self.View) layout.addWidget(self.button) def handleClearView(self): self.View.scene().clear() class ViewDT(QGraphicsView): def __init__(self,parent): QGraphicsView.__init__(self,parent) self.setScene(QGraphicsScene(self)) self.setSceneRect(QRectF(self.viewport().rect())) self.test = False self.start = 0 self.end = 0 def mousePressEvent(self,event): self.test = True self.__start = event.pos() self.start = QPointF(self.mapToScene(event.pos())) def mouseMoveEvent(self,event): self.end = QPointF(self.mapToScene(event.pos())) if self.start != self.end and self.test is True: self.scene().addItem(QGraphicsLineItem(QLineF(self.start,self.end))) self.start = self.end def mouseReleaseEvent(self, event): self.test = False if __name__ == '__main__': app = QApplication(sys.argv) window = Window() window.resize(640, 480) window.show() sys.exit(app.exec_())