PyQt4 - self.scene() - addItem()和removeItem()

时间:2015-09-04 16:24:41

标签: pyqt add selecteditem scene

import functools
from code.ghosts import Ghosts


class Pacman(QtGui.QGraphicsPixmapItem):
    def __init__(self):
        super(Pacman, self).__init__()
        self.setPixmap(QtGui.QPixmap("pacman.png"))

    def game_continue(self):
        objects = list(self.scene().items())
        for i in range(objects.__len__()):
            if type(objects[i]) is Ghosts:
            self.scene().removeItem(objects[i])
        func = functools.partial(self.show_again, objects)
        QtCore.QTimer.singleShot(100, func)

    def show_again(self, objects):
        for object_ in objects:
            if type(object_) is Ghosts:
                self.scene().addItem(object_)

它告诉我NoneType对象没有属性addItem(它是关于代码最后一行中的self.scene())。为什么它会识别self.scene.removeItem()并执行它,但是没有addItem?

1 个答案:

答案 0 :(得分:1)

  

QGraphicsScene QGraphicsItem.scene(self)

     

返回项目的当前场景,如果未存储项目,则返回0   在场景中。

http://pyqt.sourceforge.net/Docs/PyQt4/qgraphicsitem.html#scene

如果你先调用removeItem(),那么在调用addItem()时它将返回None。您始终可以在构造函数方法中将QGraphicsScene实例存储在项目本身中。这样,项目是否属于场景无关紧要。