pyside QGraphicsScene: Почему это не работает? - PullRequest
2 голосов
/ 28 января 2012

Я новичок в Qt и PySyde. Я пытаюсь создать небольшое приложение для визуализации чертежей Sime Line. Для этого я пытаюсь использовать QGraphicsView и QGraphicsScene. Я сделал тест, чтобы узнать, как это работает, но это не так. Я много гуглил вокруг, я не понимаю, почему это не работает. Может кто-нибудь объяснить мне причину и принести мне свет?

Мой код (просто хочу поставить строку и образец текста на сцене):

#!/usr/bin/python
# -*- coding: utf-8 -*-

import sys
from PySide import QtGui, QtCore

class Example(QtGui.QWidget):

    def __init__(self):
        super(Example, self).__init__()
        self.initUI()

    def initUI(self):

        hbox=QtGui.QHBoxLayout()
        leftpanel=QtGui.QFrame()
        leftpanel.setGeometry(0,0,300,400)
        scene=QtGui.QGraphicsScene()
        scene.addText("Hello, world!")
        view=QtGui.QGraphicsView(scene,leftpanel)
        view.setSceneRect(0,0,300,400)
        pen=QtGui.QPen(QtCore.Qt.black,2)
        scene.addLine(0,0,200,200,pen)
        hbox.addWidget(leftpanel)
        rightpanel=QtGui.QFrame()
        hbox.addWidget(rightpanel)
        szoveg=QtGui.QLabel(rightpanel)
        szoveg.setText(u"Hello World!")
        self.setLayout(hbox)
        self.resize(500,500)
        self.setWindowTitle('blabla')
        self.show()


def main():

    app = QtGui.QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())


if __name__ == '__main__':
    main()

1 Ответ

2 голосов
/ 28 января 2012

Вам необходимо сохранить ссылку на сцену где-нибудь, например, в Example экземпляр:

def initUI(self):
    # ...
    scene = QtGui.QGraphicsScene()
    self.scene = scene  # save reference to scene, or it will be destroyed
    scene.addText("Hello, world!")
    # ...

В другой функции вы сможете добавить больше элементов на сцену:

def anotherFunction(self):     
    self.scene.addText("Another Hello, world!")
...