QGraphicsview 中的 PyQt pyqtgraph

PyQt pyqtgraph in QGraphicsview

我尝试在 QGraphicsView 中使用 pygtgraph 绘制绘图,但效果并不好。我喜欢这样:

self.plotWdgt= pg.PlotWidget(self.graphicsView)

对于情节:

self.plotWdgt.plot(x, y)

问题是:我知道绘图在 QGraphicsView 中,因为我在 graphicsView 的左上角看到了一小部分图形,但我无法完全看到它(参见 link以下)。我想将它放在 QGraphicsView 的中心并使其适合它。

我得到的结果

编辑

简单的可复制示例:

import sys
import pyqtgraph as pg
from PyQt5.QtWidgets import QMainWindow, QApplication
from PyQt5 import uic


class MainWindow(QMainWindow):
    def __init__(self, *args, **kwargs):
        super(MainWindow, self).__init__(*args, **kwargs)
        uic.loadUi('test.ui', self)
        self.plotWdgt= pg.PlotWidget(self.graphicsView)
        data = [1,2,3,4,5,6,7,8,9,10]
        self.plotWdgt.plot(data)
        
         
if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = MainWindow()
    window.show()
    app.exec_()

形式:

<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
 <class>MainWindow</class>
 <widget class="QMainWindow" name="MainWindow">
  <property name="geometry">
   <rect>
    <x>0</x>
    <y>0</y>
    <width>800</width>
    <height>600</height>
   </rect>
  </property>
  <property name="windowTitle">
   <string>MainWindow</string>
  </property>
  <widget class="QWidget" name="centralwidget">
   <layout class="QGridLayout" name="gridLayout">
    <item row="0" column="0">
     <widget class="QGraphicsView" name="graphicsView"/>
    </item>
   </layout>
  </widget>
  <widget class="QMenuBar" name="menubar">
   <property name="geometry">
    <rect>
     <x>0</x>
     <y>0</y>
     <width>800</width>
     <height>21</height>
    </rect>
   </property>
  </widget>
  <widget class="QStatusBar" name="statusbar"/>
 </widget>
 <resources/>
 <connections/>
</ui>

您刚刚确定 PlotWidget 是 QGraphicsView 的子项,这与将其作为项目放置不同。如果你想添加一个QWidget(比如PlotWidget)那么你必须使用QGraphicsProxyWidget或者QGraphicsScene的addWidget方法:

import sys
import pyqtgraph as pg
from PyQt5.QtWidgets import QApplication, QGraphicsScene, QMainWindow
from PyQt5 import uic


class MainWindow(QMainWindow):
    def __init__(self, *args, **kwargs):
        super(MainWindow, self).__init__(*args, **kwargs)
        uic.loadUi("test.ui", self)

        scene = QGraphicsScene()
        self.graphicsView.setScene(scene)

        self.plotWdgt = pg.PlotWidget()
        data = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
        plot_item = self.plotWdgt.plot(data)

        proxy_widget = scene.addWidget(self.plotWdgt)


if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = MainWindow()
    window.show()
    app.exec_()

注意:PlotWidget 是一个 QGraphicsView,plot_item 是一个 QGraphicsItem。