在QWidget上的QPixmap上绘制点(pyqt5)

在QWidget上的QPixmap上绘制点(pyqt5),第1张

在QWidget上的QPixmap上绘制点(pyqt5)

使用时

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_())



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5617566.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-15
下一篇 2022-12-15

发表评论

登录后才能评论

评论列表(0条)

保存