【问题标题】:PyQt4 - self.scene() - addItem() and removeItem()PyQt4 - self.scene() - addItem() 和 removeItem()
【发布时间】:2015-09-05 10:26:32
【问题描述】:
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?

【问题讨论】:

  • 您是否已将Pacman 实例添加到场景中?如果没有,self.scene() 将返回 None
  • 我已经添加了它,但是在阅读了下面的评论后,我明白了我的错误。谢谢你的回答:)

标签: pyqt add selecteditem scene


【解决方案1】:

QGraphicsScene QGraphicsItem.scene (self)

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

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

如果您首先调用 removeItem(),那么在调用 addItem() 时它将返回 None。您始终可以在其构造方法期间将 QGraphicsScene 实例存储在项目本身中。这样,物品是否属于场景并不重要。

【讨论】:

  • 我曾尝试过类似的方法,但似乎我做错了。现在我又试了一次,它奏效了。谢谢你。 :)
猜你喜欢
  • 2017-03-31
  • 1970-01-01
  • 1970-01-01
  • 2012-12-16
  • 1970-01-01
  • 1970-01-01
  • 2017-04-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多