Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在PyQt5 QPainter中擦除点?_Python_Qt_Pyqt_Pyqt5_Coordinates - Fatal编程技术网

Python 如何在PyQt5 QPainter中擦除点?

Python 如何在PyQt5 QPainter中擦除点?,python,qt,pyqt,pyqt5,coordinates,Python,Qt,Pyqt,Pyqt5,Coordinates,我想在图像上显示加速度计的x和y坐标。我使用QPaint设置图像和drawPoint函数来绘制给定点的坐标。绘制新坐标时,我需要删除旧坐标,以便一次只有一个坐标。在下面的代码中,我调用了drawCoordinate两次,结果是目标图像在0,0和0.5,0.5处有两个坐标点,但理想情况下,我只剩下最后绘制的坐标 这是我在这里的第一个问题,所以我希望我的格式是正确的!如果我需要解决任何问题以帮助澄清,请告诉我 class Target(QWidget): def __init__(sel

我想在图像上显示加速度计的x和y坐标。我使用QPaint设置图像和drawPoint函数来绘制给定点的坐标。绘制新坐标时,我需要删除旧坐标,以便一次只有一个坐标。在下面的代码中,我调用了drawCoordinate两次,结果是目标图像在0,0和0.5,0.5处有两个坐标点,但理想情况下,我只剩下最后绘制的坐标

这是我在这里的第一个问题,所以我希望我的格式是正确的!如果我需要解决任何问题以帮助澄清,请告诉我


class Target(QWidget):

    def __init__(self):
        super().__init__()
        self.drawing = False
        self.image = QPixmap(r"Pictures\target_png_300.png")
        self.setGeometry(0, 0, 300, 300)
        self.resize(self.image.width(), self.image.height())
        self.show()

    def paintEvent(self, event):
        painter = QPainter(self)
        painter.drawPixmap(self.rect(), self.image)
    
    def paintCoordinate(self, x, y):
        painter = QPainter(self.image)
        r = QRect(-1, -1, 2, 2)
        painter.setWindow(r)
        pen = QPen(Qt.black, 0.06, Qt.DotLine, Qt.RoundCap)
        painter.setPen(pen)
        painter.drawPoint(QPointF(x, y))

if __name__ == '__main__':
    
    app = QApplication(sys.argv)
    ex = Target()
    ex.paintCoordinate(0, 0)
    ex.paintCoordinate(0.5, 0.5)
    sys.exit(app.exec_())


如果只需要一个点,则不要修改QPixmap,只需在paintEvent方法中进行绘制:

类目标(QWidget):
定义初始化(自):
super()。\uuuu init\uuuuu()
self._pixmap=QPixmap()
自身坐标=QPointF()
@财产
def pixmap(自):
返回自我。\u pixmap
@pixmap.setter
def pixmap(自身,pixmap):
self.\u pixmap=pixmap.copy()
self.update()
size=self.pixmap.size()
如果size.isValid():
自我调整大小(大小)
其他:
自我调整大小(300300)
@财产
def坐标(自身):
返回自坐标
@坐标设定器
def坐标(自身、点):
自身坐标=点
self.update()
def paintEvent(自身,事件):
油漆工=油漆工(自身)
painter.drawPixmap(self.rect(),self.pixmap)
r=QRect(-1,-1,2,2)
设置窗口(r)
pen=QPen(Qt.black,0.06,Qt.DotLine,Qt.RoundCap)
画师:画笔
绘制点(自坐标)
如果名称=“\uuuuu main\uuuuuuuu”:
app=QApplication(sys.argv)
ex=目标()
ex.pixmap=QPixmap(r“Pictures\target\u png\u 300.png”)
坐标=QPointF(0,0)
ex.坐标=QPointF(0.5,0.5)
例如:show()
sys.exit(app.exec_())

在光栅图像上绘图意味着覆盖其内容,没有“擦除”或“撤消”:就像在绘画上使用画笔:如果你试图“擦除”,就像在你试图“取消绘制”的东西上使用漂白剂一样

跟踪手动绘制的内容(坐标),然后相应地执行
paintEvent

class Target(QWidget):

    def __init__(self):
        super().__init__()
        self.drawing = False
        self.image = QPixmap(r"Pictures\target_png_300.png")
        self.setGeometry(0, 0, 300, 300)
        self.resize(self.image.width(), self.image.height())
        self.points = []
        self.show()

    def paintEvent(self, event):
        painter = QPainter(self)
        painter.drawPixmap(self.rect(), self.image)
        r = QRect(-1, -1, 2, 2)
        painter.setWindow(r)
        painter.setPen(QPen(Qt.black, 0.06, Qt.DotLine, Qt.RoundCap))
        for point in self.points:
            painter.drawPoint(point)
    
    def paintCoordinate(self, x, y):
        self.points.append(QPointF(x, y))
        self.update()

    def deleteLastPoint(self):
        self.points.pop()
        self.update()


if __name__ == '__main__':
    import sys
    app = QApplication(sys.argv)
    ex = Target()
    ex.paintCoordinate(0, 0)
    ex.paintCoordinate(0.5, 0.5)
    QTimer.singleShot(1000, lambda: ex.deleteLastPoint())
    sys.exit(app.exec_())
类目标(QWidget):
定义初始化(自):
super()。\uuuu init\uuuuu()
self.drawing=False
self.image=QPixmap(r“Pictures\target\u png\u 300.png”)
self.setGeometry(0,0,300,300)
self.resize(self.image.width(),self.image.height())
self.points=[]
self.show()
def paintEvent(自身,事件):
油漆工=油漆工(自身)
painter.drawPixmap(self.rect(),self.image)
r=QRect(-1,-1,2,2)
设置窗口(r)
画师设置笔(QPen(Qt.black,0.06,Qt.DotLine,Qt.RoundCap))
对于自我点中的点:
绘制点(点)
def油漆坐标(自、x、y):
self.points.append(QPointF(x,y))
self.update()
def deleteLastPoint(自):
self.points.pop()
self.update()
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
导入系统
app=QApplication(sys.argv)
ex=目标()
例如,油漆坐标(0,0)
例如油漆坐标(0.5,0.5)
QTimer.singleShot(1000,lambda:ex.deleteLastPoint())
sys.exit(app.exec_())

非常感谢您的支持!这个解释很有道理,我没有意识到我正在覆盖图像。还感谢您编辑我的问题:)