QLabel上有QLabel。 我在标签上设置了一个QPixmap。无论用户在哪里单击图像,我都要画一个点。我定义了mouseReleaseEvent(有效)和paintEvent(但没有绘制点)。我读过所有类似的问题,但没有一个对我有效。有什么帮助吗?我的相关代码:
class ImageScroller(QtWidgets.QWidget):
def __init__(self, img):
QtWidgets.QWidget.__init__(self)
main_layout = QtWidgets.QVBoxLayout()
self._image_label = QtWidgets.QLabel()
self._set_image(img)
main_layout.addWidget(self._image_label)
main_layout.addStretch()
self.setLayout(main_layout)
def _set_image(self, img):
img = qimage2ndarray.array2qimage(img)
qimg = QtGui.QPixmap.fromImage(img)
self._img_pixmap = QtGui.QPixmap(qimg)
self._image_label.show()
def paintEvent(self, paint_event):
painter = QtGui.QPainter(self)
painter.begin(self)
painter.setPen(QtGui.QPen(QtCore.Qt.red))
pen = QtGui.QPen()
pen.setWidth(20)
painter.setPen(pen)
painter.setRenderHint(QtGui.QPainter.Antialiasing, True)
painter.drawPoint(300,300)
painter.drawLine(100, 100, 400, 400)
for pos in self.chosen_points:
painter.drawPoint(pos)
painter.end()
def mouseReleaseEvent(self, cursor_event):
self.chosen_points.append(QtGui.QCursor().pos())
self.update()
当您使用
QtGui.QCursor.pos()
获取光标相对于屏幕的坐标时,但是当您想要绘制一个小部件时,您必须在小部件的坐标中,因为它具有mapToGlobal()
方法:但是在这种情况下还有另一种解决方案,您必须使用返回}方法中的信息:
^{pr2}$mouseReleaseEvent
的事件,该事件包含{另一个问题是,您创建的标签位于小部件上方,因此您看不到这些点,最简单的方法是直接使用
drawPixmap()
方法绘制QPixmap
。在完整代码:
相关问题 更多 >
编程相关推荐