QGraphicsView未在QMainWind中显示

2024-05-01 07:53:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我不知道为什么这个应用程序没有显示任何东西。我将以几行文字重复说明问题的要点。使用PyQt4

class SomeScene(QtGui.QGraphicsScene):
    def __init__(self, parent = None):
        QtGui.QGraphicsScene.__init__(self, parent)

        pixmap = QtGui.QPixmap('someImage') # path is DEFINITELY valid
        item = QGraphicsPixmapItem(pixmap)
        self.addItem(item)


class MainWindow(QtGui.QMainWindow):
    def __init__(self, parent = None):
        QtGui.QMainWindow.__init__(self, parent)
        ... # code to set up window

        scene = SomeScene()
        view = QtGui.QGraphicsView(scene)

        hbox = QtGui.QHBoxLayout()
        hbox.addWidget(view)

        mainWidget = QtGui.QWidget()
        mainWidget.setLayout(hbox)

        self.setCentralWidget(mainWidget)


app = QtGui.QApplication(sys.argv)
mainWindow = MainWindow()
mainWindow.show()
sys.exit(app.exec_())

这只会显示一个空白。在


Tags: selfnoneinitdefitemclassparentqtgui
1条回答
网友
1楼 · 发布于 2024-05-01 07:53:16

由于场景已被破坏,视图为空白。如果场景未存储在成员变量中,则会销毁该场景。视图不拥有场景的所有权,因为一个场景可以有多个视图。在下面的示例中,tmpScene将被销毁(导致打印“tmpScene destroyed”消息),但是自我场景将在视图中使用,并且将显示pixmap项目。在

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_())

相关问题 更多 >