2012-01-28 27 views
2

QtとPySydeの新機能です。私はシム線の描画を視覚化するための小さなアプリケーションを作成しようとしています。 これを行うために、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(シーン、左パネル)ではシーンと親をコンストラクタに提供するので、そうすべきだ。 http://www.pyside.org/docs/pyside/PySide/QtGui/QGraphicsScene.html#PySide.QtGui.QGraphicsScene – sipiatti

+0

@sipiatti、試しましたか?シーンへの参照が保存されるとき、私のために働きます。フィックスフルコード:http://pastebin.com/cBy2y8rqシーンが表示されないのは、 'initUI'が返ってきたときにPythonガベージコレクタがそれを削除するからです。 – reclosedev

+0

Hm、PyQt4では、シーンへの参照を保存せずに動作します。 – reclosedev

関連する問題