Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python pyside QGraphicscene:为什么它不工作?_Python_Qt_Pyside - Fatal编程技术网

Python pyside QGraphicscene:为什么它不工作?

Python pyside QGraphicscene:为什么它不工作?,python,qt,pyside,Python,Qt,Pyside,我对Qt和PySyde是新手。我正在尝试创建一个小应用程序来可视化sime线条图。 为了做到这一点,我尝试使用QGraphicsView和qgraphicscene。我做了一个测试来了解它是如何工作的,但它不是。我在谷歌上搜索了很多,我不明白为什么它不起作用。 有人能给我解释一下原因并给我点灯吗 我的代码(只想在场景中放置一行和一个示例文本): 您需要将对场景的引用保存到某个位置,例如在示例中实例中: def initUI(self): # ... scene = QtGui.Q

我对Qt和PySyde是新手。我正在尝试创建一个小应用程序来可视化sime线条图。 为了做到这一点,我尝试使用QGraphicsView和qgraphicscene。我做了一个测试来了解它是如何工作的,但它不是。我在谷歌上搜索了很多,我不明白为什么它不起作用。 有人能给我解释一下原因并给我点灯吗

我的代码(只想在场景中放置一行和一个示例文本):


您需要将对场景的引用保存到某个位置,例如在
示例中
实例中:

def initUI(self):
    # ...
    scene = QtGui.QGraphicsScene()
    self.scene = scene  # save reference to scene, or it will be destroyed
    scene.addText("Hello, world!")
    # ...
在另一个功能中,您可以向场景添加更多项目:

#!/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()
def anotherFunction(self):     
    self.scene.addText("Another Hello, world!")

谢谢您的回答,但问题是场景也不显示。我认为graphicview没有连接到场景,但它应该连接到场景,因为在这行视图=QtGui.QGraphicsView(场景,leftpanel)中,我提供了构造函数、场景和父对象。这里的文档说这是可能的:@sipiatti,你试过了吗?保存对场景的引用时,它对我有效。修复程序的完整代码:。场景未显示,因为Python垃圾收集器在
initUI
返回时删除它。@reclosedev。这看起来像PySide中的bug(或意外行为)。严格地说,在这种特殊情况下,不需要保存引用(尽管我并不建议这样做)。按照编写代码的方式,所有对象都应该通过父子关系在层次结构中连接在一起(这就是它与PyQt4一起工作的原因)。替代修复方法:
scene=QtGui.qgraphicscene(leftpanel)
@reclosedev感谢您的努力,它可以正常工作。另一方面,它应该与父母一起工作,所以它可能是PySide中的一个bug,正如Ekhumaro所说。如果我先创建GraphicsView,然后使用setScene方法设置场景,它也可以在PySide中工作。无论如何,我接受你的回答,因为它解决了问题。@sipiatti,是的,这是非常奇怪的行为。