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