QGraphicsview 中的 PyQt pyqtgraph

Posted

技术标签:

【中文标题】QGraphicsview 中的 PyQt pyqtgraph【英文标题】:PyQt pyqtgraph in QGraphicsview 【发布时间】:2021-06-18 00:03:37 【问题描述】:

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

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

对于情节:

self.plotWdgt.plot(x, y)

问题是:我知道绘图在 QGraphicsView 中,因为我在 graphicsView 的左上角看到一小部分图形,但我无法完全看到它(参见下面的链接)。我想把它放在 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>

【问题讨论】:

请提供minimal reproducible example 是的,抱歉没问题。 【参考方案1】:

您刚刚确定 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。

【讨论】:

以上是关于QGraphicsview 中的 PyQt pyqtgraph的主要内容,如果未能解决你的问题,请参考以下文章

PyQt5 像素级碰撞检测

qgraphicsview图片下方添加文字

QGraphicsScene,PyQt中的图像显示不正确

如何在pyqt4中的行中添加箭头?

ImportError 与“导入 PyQt5.QtSql”

PyQt 静态构建在 make 时失败