【发布时间】:2023-03-15 07:16:01
【问题描述】:
我正在尝试在 pyqtgraph.GraphicsLayout 下面绘制几个图,并使用 .setData(x,y) 实时更新它们。 不幸的是,.setData 总是返回与 libshiboken 相关的 OverflowError:
RuntimeWarning: libshiboken: Overflow: Value [1000 2000 3000 4000] 超出类型 [signed] "int" (4bytes) 的限制。
当我在没有 pg.GraphicsLayout 的情况下尝试完全相同的代码时,它可以正常工作。所以 GraphicsLayout 似乎对 PlotItem 对象有一些影响,我在源代码中看不懂。
这是我的两个最小的工作示例:
单一情节:
from pyqtgraph.Qt import QtGui, QtCore
import pyqtgraph as pg
import numpy as np
pg.mkQApp()
pw = pg.GraphicsView()
pw.show()
# layout
l = pg.PlotItem()
pw.setCentralWidget(l)
# first data and plot
x = np.array([1000, 2000, 3000, 4000])
y1 = np.array([5*10**4, 6*10**4, 7*10**4, 8*10**4])
p1 = l.plot(x, y1)
# second data and setData
x = np.array([1000, 2000, 3000, 4000])
y1 = np.array([5*10**5, 6*10**5, 7*10**5, 8*10**5])
p1.setData(x,y1)
if __name__ == '__main__':
import sys
if (sys.flags.interactive != 1) or not hasattr(QtCore, 'PYQT_VERSION'):
QtGui.QApplication.instance().exec_()
不工作的多情节:
from pyqtgraph.Qt import QtGui, QtCore
import pyqtgraph as pg
import numpy as np
pg.mkQApp()
pw = pg.GraphicsView()
pw.show()
# layout
l = pg.GraphicsLayout()
pw.setCentralWidget(l)
p1 = pg.PlotItem()
p2 = pg.PlotItem()
l.addItem(p1, row=0, col=0)
l.addItem(p2, row=1, col=0)
# first data and plot
x = np.array([1000, 2000, 3000, 4000])
y1 = np.array([5*10**4, 6*10**4, 7*10**4, 8*10**4])
y2 = np.array([0,5,7,9])
p1.plot(x, y1, pen=pen)
p2.plot(x, y2, pen=pen)
# second data and setData
x = np.array([1000, 2000, 3000, 4000])
y1 = np.array([5*10**4, 6*10**4, 7*10**4, 8*10**4])
y2 = np.array([0,5,7,9])
p1.setData(x,y1)
p2.setData(x,y2)
if __name__ == '__main__':
import sys
if (sys.flags.interactive != 1) or not hasattr(QtCore, 'PYQT_VERSION'):
QtGui.QApplication.instance().exec_()
【问题讨论】: