Skip to main content
 首页 » 编程设计

python之用 pyqt 扩展 QGraphicsItem

2025年05月04日18findumars

我如何创建一个扩展 QGraphicsItem 的类来定义一种新的 Item?

我正在努力做到这一点

#!/usr/bin/python 
 
import sys 
from PyQt4 import QtGui 
 
class Node(QtGui.QGraphicsItem): 
    def __init__(self, parent = 0): 
        self.setFlag(QtGui.QGraphicsItem.ItemIsMovable) 
 
 
app = QtGui.QApplication(sys.argv) 
 
scene = QtGui.QGraphicsScene() 
scene.addText("test") 
 
scene.addItem(Node()) 
 
view = QtGui.QGraphicsView(scene) 
view.show() 
 
sys.exit(app.exec_()) 

但是我得到了这个错误

Traceback (most recent call last): 
  File "primo.py", line 15, in <module> 
    scene.addItem(Node()) 
  File "primo.py", line 8, in __init__ 
    self.setFlag(QtGui.QGraphicsItem.ItemIsMovable) 
RuntimeError: underlying C/C++ object has been deleted     

我做错了什么?我不能在 Node 的 init 方法中调用 QGraphicsItem 构造函数,因为 QGraphicsItem 它是一个抽象类

请您参考如下方法:

解决方案是这样的

#!/usr/bin/python 
 
import sys 
from PyQt4 import QtGui 
 
class Node(QtGui.QGraphicsItem): 
    def __init__(self, parent = None): 
        QtGui.QGraphicsItem.__init__(self,parent) 
        self.setFlag(QtGui.QGraphicsItem.ItemIsMovable) 
 
app = QtGui.QApplication(sys.argv) 
 
scene = QtGui.QGraphicsScene() 
scene.addText("test") 
 
scene.addItem(Node()) 
 
view = QtGui.QGraphicsView(scene) 
view.show() 
 
sys.exit(app.exec_())