自定义QGraphicsItem删除自身

时间:2017-02-04 13:31:49

标签: qt pyqt

我正在使用PyQt 5。 我有一个QGraphicsScene,它有一个QGraphicsObject的列表来显示。 我对QRectF和其他类型没有任何问题。但是我实现了一个自定义类,如下所示:

class RobotPathItem(QGraphicsItem):
def __init__(self, path):
    super().__init__()
    qpath = []
    for xy in path:
        qpath.append(QPoint(xy[0],xy[1]))
    self.path = QPolygon(qpath)

def paint(self, painter, option, qwidget = None):
    painter.drawPoints(self.path)

def boundingRect(self):
    return QRectF(0,0,520,520)

然后我将它添加到场景中:

self.objects[model_obj.id].append(self.scene.addItem(RobotPathItem(model_obj.actuator.get_current_path())))

这里self.objects [model_obj.id]是合适的列表。 它会在现场显示出来。

问题在于,在下一次迭代中,由于某种原因从列表中删除了它。如果我检查

print(self.objects[model_obj.id][-1])

我得到了#34;没有" (NoneType)。所有其他对象仍在列表中。错误在哪里?

1 个答案:

答案 0 :(得分:1)

结果addItem不会像addRect或其他函数那样返回指针。 相反,它返回None。

因此,要使上述代码正常工作:

robot_path = RobotPathItem(model_obj.actuator.get_current_path()) self.scene.addItem(robot_path) self.objects[model_obj.id].append(robot_path) 而不是

self.objects[model_obj.id].append(RobotPathItem(model_obj.actuator.get_current_path()))

然后实施

self.objects[model_obj.id][2].set_path(model_obj.actuator.get_current_path())

更新它