2017-02-04 5 views
0

私はPyQt 5を使用しています。 私はQGraphicsObjectが表示されるリストを持つQGraphicsSceneを持っています。 私はQRectFと他のタイプに問題はありません。私は、シーンに追加カスタムQGraphicsItem自体が削除されます

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

をここで[model_obj.id]適切なリストであるself.objects次のようにしかし、私は、カスタムクラスを実装しました。 シーンに表示されます。

問題は、次の繰り返しで何らかの理由でリストから削除されてしまうことです。私がチェックしたら

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

私は "なし"(NoneType)を得る。他のすべてのオブジェクトはまだリストにあります。エラーはどこですか?

答えて

1

addItemは、addRectや他の関数のようなポインタを返しません。 代わりにNoneを返します。その後、代わりに

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

robot_path = RobotPathItem(model_obj.actuator.get_current_path()) self.scene.addItem(robot_path) self.objects[model_obj.id].append(robot_path) とはい、それは正しいです

+1

それを更新する

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

を実装:正しく動作するために上記のコードのためにそう

。 addItemはあなたが追加しているポインタを受け取るので、返す必要はありませんが、この場合は便利です。 – goug

関連する問題