Вид пуст, потому что сцена была уничтожена. Сцена уничтожается, если она не сохраняется в переменной-члене. Представление не становится владельцем сцены, поскольку сцена может иметь несколько представлений. В приведенном ниже примере tmpScene будет уничтожен (что приведет к печати сообщения «tmpScene destroy»), но в представлении будет использоваться self.scene, и будет отображаться элемент растрового изображения.
import sys
from PyQt4 import QtGui
import sip
class SomeScene(QtGui.QGraphicsScene):
def __init__(self, parent = None):
QtGui.QGraphicsScene.__init__(self, parent)
pixmap = QtGui.QPixmap('someImage')
item = QtGui.QGraphicsPixmapItem(pixmap)
self.addItem(item)
class MainWindow(QtGui.QMainWindow):
def __init__(self, parent = None):
QtGui.QMainWindow.__init__(self, parent)
# This scene will be destroyed because it is local.
tmpScene = SomeScene()
tmpScene.destroyed.connect(self.onSceneDestroyed)
self.scene = SomeScene()
view = QtGui.QGraphicsView(self.scene)
hbox = QtGui.QHBoxLayout()
hbox.addWidget(view)
mainWidget = QtGui.QWidget()
mainWidget.setLayout(hbox)
self.setCentralWidget(mainWidget)
def onSceneDestroyed(self, obj):
print 'tmpScene destroyed'
app = QtGui.QApplication(sys.argv)
mainWindow = MainWindow()
mainWindow.show()
sys.exit(app.exec_())