使用时
QtGui.QCursor.pos()要获取相对于屏幕的光标坐标,但是要绘制小部件时,您必须位于小部件的坐标中,因为小部件具有以下
mapToGlobal()方法:
self.mapFromGlobal(QtGui.QCursor.pos())
但是在这种情况下,还有另一种解决方案,您必须使用
mouseReleaseEvent在
pos()方法中包含信息的返回事件:
cursor_event.pos()
另一个问题是您创建的标签在小部件上方,因此您看不到这些点,最简单
QPixmap的
drawPixmap()方法是直接使用方法绘制。
完整的代码:
from PyQt5 import QtWidgets, QtGui, QtCoreclass ImageScroller(QtWidgets.QWidget): def __init__(self): self.chosen_points = [] QtWidgets.QWidget.__init__(self) self._image = QtGui.QPixmap("image.png") def paintEvent(self, paint_event): painter = QtGui.QPainter(self) painter.drawPixmap(self.rect(), self._image) 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) def mouseReleaseEvent(self, cursor_event): self.chosen_points.append(cursor_event.pos()) # self.chosen_points.append(self.mapFromGlobal(QtGui.QCursor.pos())) self.update()if __name__ == '__main__': import sys app = QtWidgets.QApplication(sys.argv) w = ImageScroller() w.resize(640, 480) w.show() sys.exit(app.exec_())
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)