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的主要内容,如果未能解决你的问题,请参考以下文章