pyqt做的ui界面,我用鼠标在label中显示的图像绘制矩形,为什么它绘制的起点位置跟我鼠标按下起点位置不一样,怎么解决
如图,蓝点为鼠标起点,红点为绘制起点,下面是代码块

def show_rectangle_selection(self):
# 确保label_2有图像
if not self.label_2.pixmap():
return
# 连接鼠标事件
self.label_2.mousePressEvent = self.mousePressEvent
self.label_2.mouseMoveEvent = self.mouseMoveEvent
self.label_2.mouseReleaseEvent = self.mouseReleaseEvent
def mousePressEvent(self, event):
"""处理鼠标按下事件"""
if event.button() == Qt.LeftButton:
self.start_point = event.pos()
self.end_point = event.pos()
self.update_label_2()
def mouseMoveEvent(self, event):
"""处理鼠标移动事件"""
if event.buttons() & Qt.LeftButton:
self.end_point = event.pos()
self.update()
def mouseReleaseEvent(self, event):
"""处理鼠标释放事件"""
if event.button() == Qt.LeftButton:
self.end_point = event.pos()
self.update_label_2()
def update_label_2(self):
"""更新label_2以显示选择的矩形"""
if not self.label_2.pixmap():
return
pixmap = self.label_2.pixmap().copy()
painter = QPainter(pixmap)
painter.setPen(QPen(Qt.red, 2)) # 设置红色边框和2像素宽度
# 如果已经有起始点和结束点,则绘制矩形边框
if self.start_point and self.end_point:
rect = QRect(self.start_point, self.end_point).normalized()
painter.drawRect(rect)
painter.end()
self.label_2.setPixmap(pixmap)