I'm a rookie of python and I googled a lots but still can not find how to fix it. My question is how to draw rectangle on Qlabel of image with mouse moving? My code as below.
import sys
import QT5_draw_test as ui
from PyQt5 import QtWidgets
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *
class Main(QMainWindow, ui.Ui_MainWindow):
def __init__(self):
super().__init__()
self.setupUi(self)
self.rect_begin = QPoint()
self.rect_end = QPoint()
self.image_show.setScaledContents(True)
self.image_show.installEventFilter(self)
self.img = QPixmap("0.png")
self.image_show.setPixmap(self.img)
def eventFilter(self, obj, event):
if event.type() == QEvent.MouseButtonPress:
self.rect_begin = event.pos()
elif event.type() == QEvent.MouseMove:
self.rect_end = event.pos()
self.update()
return super().eventFilter(obj, event)
def paintEvent(self, event):
super().paintEvent(event)
painter = QPainter(self.image_show.pixmap())
painter.setPen(QPen(Qt.red, 5, Qt.SolidLine))
print(self.rect_begin.x(), self.rect_begin.y(), self.rect_end.x(), self.rect_end.y())
painter.drawRect(self.rect_begin.x(), self.rect_begin.y(), self.rect_end.x(), self.rect_end.y())
if __name__ == '__main__':
import sys
app = QtWidgets.QApplication(sys.argv)
window = Main()
window.show()
sys.exit(app.exec_())
If modify the parameter of painter.drawRect to constant, it's work. (As below)
But If the parameter is variable, it's not work.
import sys
import QT5_draw_test as ui
from PyQt5 import QtWidgets
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *
class Main(QMainWindow, ui.Ui_MainWindow):
def __init__(self):
super().__init__()
self.setupUi(self)
self.rect_begin = QPoint()
self.rect_end = QPoint()
self.image_show.setScaledContents(True)
self.image_show.installEventFilter(self)
self.img = QPixmap("0.png")
self.image_show.setPixmap(self.img)
def eventFilter(self, obj, event):
if event.type() == QEvent.MouseButtonPress:
self.rect_begin = event.pos()
elif event.type() == QEvent.MouseMove:
self.rect_end = event.pos()
self.update()
return super().eventFilter(obj, event)
def paintEvent(self, event):
super().paintEvent(event)
painter = QPainter(self.image_show.pixmap())
painter.setPen(QPen(Qt.red, 5, Qt.SolidLine))
print(self.rect_begin.x(), self.rect_begin.y(), self.rect_end.x(), self.rect_end.y())
painter.drawRect(50, 50, 100, 100)
if __name__ == '__main__':
import sys
app = QtWidgets.QApplication(sys.argv)
window = Main()
window.show()
sys.exit(app.exec_())