2012-01-28 4 views
2

Qt와 PySyde를 처음 사용합니다. 나는 sime 선 그림을 시각화하기 위해 작은 응용 프로그램을 만들려고합니다. QGraphicsView는 QGraphicsScene을 사용하려고 시도합니다. 나는 그것이 어떻게 작동 하는지를 배우기 위해 테스트를 만들었지 만 그렇지 않다. 나는 주위에 많이 봤다, 나는 그것이 작동하지 않는 이유를 이해하지 않습니다. 누군가가 나에게 이유를 설명하고 나에게 빛을 가져다 줄 수 있습니까?pyside 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() 

답변

2

당신은 어딘가, 예를 장면에 대한 참조를 저장해야을 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!") 
+0

감사하지만, 문제는 장면 중 하나를 표시하지 않는다는 것입니다 . 나는이 그래픽 뷰가 장면에 연결되어 있지 않다고 생각하지만,이 라인 뷰 = QtGui.QGraphicsView (scene, leftpanel)에서 장면과 부모를 constuctor에게 제공하기 때문에 그렇다. 여기 문서에서 가능하다고 말합니다 : http://www.pyside.org/docs/pyside/PySide/QtGui/QGraphicsScene.html#PySide.QtGui.QGraphicsScene – sipiatti

+0

@sipiatti, 시도해 보셨습니까? 그것은 장면에 대한 참조가 저장 될 때 나를 위해 작동합니다. 수정 사항이있는 전체 코드 : http://pastebin.com/cBy2y8rq. 'initUI'가 반환 될 때 파이썬 가비지 컬렉터가 그것을 삭제하기 때문에 장면이 표시되지 않습니다. – reclosedev

+0

흠, PyQt4에서 장면에 대한 참조를 저장하지 않고도 작동합니다. – reclosedev