I have a QLabel that displays a Pixmap and I want the user to be able to drag inside that label and draw a rectangle.
Just like how this code works.
However my label is loaded from a .ui file so I cant just do self.label = MyLabel()
in my window class as it'll get rid of my existing label and its styling, I can access my label directly using self.myLabel
("myLabel" being its name in the .ui file). I dont understand how I can subclass my existing label or is it possible to implement this without subclassing?
from PyQt5.QtWidgets import *from PyQt5.QtGui import *from PyQt5.QtCore import *class MyLabel(QLabel): def __init__(self): super().__init__() self.begin = QPoint() self.end = QPoint() self.rectangle = None def paintEvent(self, event): super().paintEvent(event) painter = QPainter(self) painter.setPen(QPen(Qt.red, 2, Qt.SolidLine)) self.rectangle = QRect(self.begin, self.end) painter.drawRect(self.rectangle) def mousePressEvent(self, event): self.begin = event.pos() self.end = event.pos() self.update() def mouseMoveEvent(self, event): self.end = event.pos() self.update() def mouseReleaseEvent(self, event): self.end = event.pos() self.update() print((self.rectangle.size()))class MyApp(QMainWindow): def __init__(self): super().__init__() self.label = MyLabel() self.setCentralWidget(self.label) self.setGeometry(100, 100, 800, 800) self.setWindowTitle('Rectangle Drawing')if __name__ == '__main__': app = QApplication([]) window = MyApp() window.show() app.exec_()