从QGraphicsScene中删除/销毁/删除QGraphicsItem

时间:2013-07-02 18:53:54

标签: python pyqt

我觉得这个问题之前已经得到了回答,但我找不到我生活的答案(特别是因为标题中的同义词传播了解决方案)。我想要一个明确的答案,这是从场景中删除QGraphicsItem的最佳方法。让我们采取最简单的方案:一个简单的“橡皮筋”矩形。

from PyQt4 import QtGui, QtCore

class Rubbery(QtGui.QGraphicsScene):

  def mousePressEvent(self, event):
    self.origin = event.scenePos()
    self.rect = QtGui.QGraphicsRectItem(self.origin.x(), self.origin.y(), 0, 0, None, self)

  def mouseMoveEvent(self, event):
    self.rect.setRect(QtCore.QRectF(self.origin, event.scenePos()).normalized())

  def mouseReleaseEvent(self, event):
    self.rect.setParentItem(None)

app = QtGui.QApplication([])

scene = Rubbery()
scene.setSceneRect(0,0,500,500)
view = QtGui.QGraphicsView(scene)
view.show()

app.exec()

如果你看mouseReleaseEvent,那就是我遇到问题的地方。我想完全彻底地从场景中删除它并立即更新它,但是调用self.update()什么都不做。我希望立即反映这一变化。在PySide中,似乎del很好地处理了事情,但现在还不清楚。

选项: del setParent(None) setParentItem(None) hide() + deleteLater()

1 个答案:

答案 0 :(得分:2)

QGraphicsSceneremoveItem()方法:

def mouseReleaseEvent(self, event):
    self.removeItem(self.rect)

释放鼠标时将立即删除矩形。