figure = plt.figure(figsize=(4, 2), dpi=100) canvas = FigureCanvas(figure) x = np.arange(1, 1000) y = x ** 2 plt.plot(x, y) canvas.draw() widget = QWidget() layout = QVBoxLayout(widget) layout.addWidget(canvas) graphicscene = QtWidgets.QGraphicsScene() # 第三步,创建一个QGraphicsScene,因为加载的图形(FigureCanvas)不能直接放到graphicview控件中,必须先放到graphicScene,然后再把graphicscene放到graphicview中 graphicscene.addWidget(widget) # 第四步,把图形放到QGraphicsScene中,注意:图形是作为一个QWidget放到QGraphicsScene中的 self.Market.graphicsView.setScene(graphicscene) # 第五步,把QGraphicsScene放入QGraphicsView self.Market.graphicsView.show() 哪里有问题
时间: 2024-01-12 21:05:10 浏览: 80
matplotilb中fig,ax = plt.subplots()的使用
根据你提供的代码,我看到有几个问题,可能导致程序出错:
1. 在创建 `QVBoxLayout` 对象时,没有传入任何参数,这可能导致布局不正确,你需要传入一个 `QWidget` 对象作为参数。
2. 在将 `FigureCanvas` 对象添加到布局中时,没有指定拉伸因子(stretch factor)和对齐方式(alignment)。你可以在 `addWidget` 方法中传入这两个参数,示例代码如下:
```python
layout.addWidget(canvas, stretch=1, alignment=Qt.AlignCenter)
```
3. 在将 `widget` 添加到 `graphicscene` 中时,应该使用 `addWidget` 方法,而不是直接赋值。因为 `QGraphicsScene` 并不支持直接添加 `QWidget` 对象。
4. 在将 `graphicscene` 添加到 `graphicsView` 中时,应该使用 `setScene` 方法,而不是直接赋值。
下面是修改后的代码,你可以参考一下:
```python
figure = plt.figure(figsize=(4, 2), dpi=100)
canvas = FigureCanvas(figure)
x = np.arange(1, 1000)
y = x ** 2
plt.plot(x, y)
canvas.draw()
widget = QWidget()
layout = QVBoxLayout(widget)
layout.addWidget(canvas, stretch=1, alignment=Qt.AlignCenter)
graphicscene = QtWidgets.QGraphicsScene()
graphicscene.addWidget(widget)
self.Market.graphicsView.setScene(graphicscene)
self.Market.graphicsView.show()
```
阅读全文